I have a java class that has 2 methods with same but different arities (one take no arguments, other takes 1 argument). I create a proxy that overrides both this methods. The problem is that if no-arg method is called from this java class - base implementation is called instead of proxie's. But if I call no-arg method directly on obj - correct proxy method is invoked. Can someone explain this behavior?
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))
Output:
Overridden callMethods
Default callMethods
Overridden callMethods2
Expected output:
Overridden callMethods
Overridden callMethods
Overridden callMethods2