我有一个 java 类,它有 2 个方法具有相同但不同的参数(一个不带参数,另一个带 1 个参数)。我创建了一个覆盖这两种方法的代理。问题是,如果从这个 java 类调用无参数方法 - 调用基本实现而不是代理。但是,如果我直接在 obj 上调用无参数方法 - 将调用正确的代理方法。有人可以解释这种行为吗?
测试.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");
}
}
运行.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