У меня есть класс 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