Mam klasę java, która ma 2 metody z tymi samymi, ale różnymi ariami (jeden nie bierze żadnych argumentów, inny bierze 1 argument). Tworzę serwer proxy, który przesłania obie te metody. Problem polega na tym, że jeśli z tej klasy java wywoływana jest metoda no-arg, to zamiast proxie wywoływana jest podstawowa implementacja. Ale jeśli wywołasz metodę no-arg bezpośrednio na obj - zostanie wywołana właściwa metoda proxy. Czy ktoś może wyjaśnić to zachowanie?Nadpisywanie wielu metod w proxy w 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))
wyjściowa:
Overridden callMethods
Default callMethods
Overridden callMethods2
oczekiwany wynik:
Overridden callMethods
Overridden callMethods
Overridden callMethods2