【发布时间】:2020-12-30 19:47:20
【问题描述】:
是否可以代理这样的类并覆盖这两种方法?
public abstract class C {
...
public abstract void m(String a);
public void m(Integer a) {}
}
这不起作用:
(proxy [C] []
(m [^String a])
(m [^Integer a]))
;; java.lang.IllegalArgumentException: Method 'm' redefined
我目前的解决方法是编写一个代理友好的 java 类来重命名重载:
public abstract class C2 extends C {
@Override
public void m(Integer a) { this.m2(a); }
public abstract void m2(Integer a);
}
但如果有一个在构建中不需要 javac 的解决方案会很好
【问题讨论】:
-
不确定
proxy部分,但lein可以自动编译任何Java 类。请参阅此模板项目以获取示例:github.com/io-tupelo/clj-template
标签: clojure clojure-java-interop