Nik*_*zov 6 overloading clojure arity
我有一个java类,它有2个方法具有相同但不同的arities(一个不带参数,另一个带1个参数).我创建了一个覆盖这两种方法的代理.问题是如果从这个java类调用no-arg方法 - 调用基本实现而不是代理.但是如果我直接在obj上调用no-arg方法 - 调用正确的代理方法.有人可以解释这种行为吗?
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 Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
输出:
Overridden callMethods
Default callMethods
Overridden callMethods2
Run Code Online (Sandbox Code Playgroud)
预期产量:
Overridden callMethods
Overridden callMethods
Overridden callMethods2
Run Code Online (Sandbox Code Playgroud)
代理维护它为该对象代理的方法的映射.在这个地图中用它的方法处理的任何调用,其他调用该对象.proxy-super通过从函数方法映射中移除自身,调用自身并将自己置于后面的语言来实现它的魔力.在调用中,对代理对象的该方法的任何调用都将落入代理对象.
Meikel Brandmeyer在本文末尾描述了一个非常类似的场景.我怀疑答案是使用gen-class而不是代理
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |