1

gen-class を使用して Clojure でサブクラスを作成する場合、exposes-methods を介して保護された仮想 (非最終) メソッドを公開できますが、オーバーライドによって実装されるため、非仮想 (最終) メソッドでは機能しません。

リフレクションを通じてこの方法で保護されたメソッドを呼び出す唯一の方法はありますか?

reify または proxy はこれを gen-class よりもうまく行うことができますか?

4

1 に答える 1

1

これは clojure-clr のバグであることが判明しました。おそらく、JVM バージョンでは問題なく動作します。Clojure では、非仮想/最終メソッドが保護/公開されている場合、これらのメソッドを呼び出すことができます。ただし、呼び出そうとしたメソッドは protected internal でした。これは、実際には protectedまたはinternal を意味します。clojure-clr は、これを保護された内部的なもの、内部的な意味は同じアセンブリ内でのみアクセス可能であると誤って解釈していまし。このため、私のメソッド呼び出しは失敗していました。

これは、最新バージョンの clojure-clr で修正されています。

于 2013-03-15T15:38:48.793 に答える