私は、同じであるが異なるアリティを持つ2つのメソッドを持つJavaクラスを持っています(1つは引数をとらず、もう1つは1つの引数を取ります)。この両方のメソッドをオーバーライドするプロキシを作成します。問題は、このjavaクラスからno-argメソッドが呼び出された場合、プロキシの代わりに基本実装が呼び出されることです。しかし、objで直接no-argメソッドを呼び出すと、正しいプロキシメソッドが呼び出されます。誰かがこの振る舞いを説明できますか?
Test.java:
package example;
public abstract class Test {
public void callMethods(Object obj){
callMethods();
callMethods2();
}
public void callMethods() {
System.out.println("Default callMethods");
}
public void callMethods2() {
System.out.println("Default callMethods2");
}
}
run.clj:
(let [obj (proxy [example.Test] []
(callMethods
([] (println "Overridden callMethods"))
([obj] (proxy-super callMethods obj)))
(callMethods2
([] (println "Overridden callMethods2"))))]
(.callMethods obj)
(.callMethods obj :test))
出力:
Overridden callMethods
Default callMethods
Overridden callMethods2
期待される出力:
Overridden callMethods
Overridden callMethods
Overridden callMethods2