Ho una classe java che ha 2 metodi con le stesse ma diverse funzioni (uno non accetta argomenti, l'altro accetta 1 argomento). Creo un proxy che sostituisce entrambi questi metodi. Il problema è che se il metodo no-arg viene chiamato da questa classe java - l'implementazione base viene chiamata invece di proxie. Ma se chiamo il metodo no-arg direttamente su obj - viene invocato il metodo proxy corretto. Qualcuno può spiegare questo comportamento?Sovrascrittura dei metodi multi-arity in proxy in 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))
uscita:
Overridden callMethods
Default callMethods
Overridden callMethods2
uscita prevista:
Overridden callMethods
Overridden callMethods
Overridden callMethods2