Вызов невиртуальных защищенных методов из подкласса Java/C# в Clojure/ClojureCLR

При создании подкласса в Clojure с использованием gen-класса вы можете предоставлять защищенные виртуальные (не конечные) методы через exposes-methods, однако это реализуется через переопределение, которое не может работать для не виртуальных (финальных) методов.

Единственный способ вызвать защищенный метод таким образом через отражение?

Может ли reify или proxy сделать это лучше, чем gen-class?


person Devin Garner    schedule 08.03.2013    source источник
comment
Что вы подразумеваете под не виртуальными методами здесь? Статический? Финал?   -  person ivant    schedule 08.03.2013
comment
В С# этот термин является виртуальным. В java я считаю, что методы по умолчанию виртуальны, но final означает невиртуальный.   -  person Devin Garner    schedule 08.03.2013


Ответы (1)


Это оказалось ошибкой в ​​clojure-clr. Вероятно, он отлично работает в версии JVM. Clojure позволяет вызывать невиртуальные/конечные методы, если они защищены/общедоступны. Однако метод, который я пытался вызвать, был защищенным внутренним, что на самом деле означает защищенный или внутренний. clojure-clr неправильно интерпретировал это как защищенное и внутреннее, внутреннее значение, доступное только в той же сборке. Из-за этого мой вызов метода не удался.

Это было исправлено в последней версии clojure-clr.

person Devin Garner    schedule 15.03.2013