使用重载的相同arity方法创建抽象java类的clojure代理

使用重载的相同arity方法创建抽象java类的clojure代理,clojure,clojure-java-interop,Clojure,Clojure Java Interop,是否可以像这样代理一个类并重写这两个方法 公共抽象类C{ ... 公开摘要无效m(字符串a); 公共空m(整数a){} } 这不起作用: (代理[C][] (m[^a字符串]) (m[^整数a])) ;; java.lang.IllegalArgumentException:重新定义了方法“m” 我当前的解决方法是编写一个代理友好的java类,用于重命名重载: 公共抽象类C2扩展了C{ @凌驾 公共空m(整数a){this.m2(a);} 公开摘要无效m2(整数a); } 但是如果有一个在

是否可以像这样代理一个类并重写这两个方法

公共抽象类C{
...
公开摘要无效m(字符串a);
公共空m(整数a){}
}
这不起作用:

(代理[C][]
(m[^a字符串])
(m[^整数a]))
;; java.lang.IllegalArgumentException:重新定义了方法“m”
我当前的解决方法是编写一个代理友好的java类,用于重命名重载:

公共抽象类C2扩展了C{
@凌驾
公共空m(整数a){this.m2(a);}
公开摘要无效m2(整数a);
}

但是如果有一个在构建中不需要javac的解决方案,最好在代理中包含一个方法
m
。不要键入提示参数。让函数在运行时检查实际参数类型,并相应地进行操作


(如果所讨论的方法在算术上不同,则需要将代理方法参数列表声明为
[&x]
,即接收所有参数,不管它们可能有多少,作为一个向量。例如,当您要代理
java.io.Writer
时,此技术会有所帮助。)

在代理中包括一个方法
m
。不要键入提示参数。让函数在运行时检查实际参数类型,并相应地进行操作


(如果所讨论的方法在算术上不同,则需要将代理方法参数列表声明为
[&x]
,即接收所有参数,不管它们可能有多少,作为一个向量。例如,当您要代理
java.io.Writer
时,此技术会有所帮助。)

不确定
代理部分,但是
lein
可以自动编译任何Java类。查看此模板项目以获取示例:不确定
proxy
部分,但是
lein
可以自动编译任何Java类。有关示例,请参见此模板项目: