6
我有一個java類,有2個方法具有相同但不同的元素(一個不帶參數,另一個帶1個參數)。我創建了一個覆蓋這兩種方法的代理。問題是,如果從這個Java類中調用no-arg方法 - 調用base實現而不是proxie的方法。但是如果我直接在obj上調用no-arg方法 - 調用正確的代理方法。有人可以解釋這種行爲嗎?在clojure中覆蓋代理中的多元方法
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