如何解决使用重载的相同方法创建抽象java类的clojure代理
是否可以代理这样的类并覆盖这两种方法?
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的解决方案会很好
解决方法
在代理中包括一种方法m
。不要键入提示参数。让该函数在运行时检查实际的参数类型并相应地执行操作。
(如果所讨论的方法在Arity方面不同,则需要将代理方法参数列表声明为[ & x]
,即,以向量的形式接收所有参数(无论参数多少)。例如,您要代理java.io.Writer
。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。