如何在Clojure中实现Java接口 [英] How do I implement a Java interface in Clojure
本文介绍了如何在Clojure中实现Java接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何创建一个Clojure对象实现这个接口,然后从Java代码调用
public interface Doer {
public String doSomethin(String input);
}
Doer clojureDoer =?
String output = clojureDoer.doSomethin(input);
解决方案
reify
强烈推荐用于实现接口 - proxy
是重型,旧和慢,所以应该尽可能避免。实现如下:
(reify Doer
(doSomethin [this input]
.whatever ...)))
注意,现有的使用 proxy
语法不正确,如果你决定使用代理:proxy接受隐式这个
参数,而不是命名的第一个参数。 / p>
How do I create a Clojure object that implements this interface and then gets called from Java code?
public interface Doer {
public String doSomethin(String input);
}
Doer clojureDoer = ?;
String output = clojureDoer.doSomethin(input);
解决方案
reify
is strongly preferred for implementing interfaces - proxy
is heavy-duty, old, and slow, so should be avoided when possible. An implementation would look like:
(reify Doer
(doSomethin [this input]
(...whatever...)))
Note that the existing answer about using proxy
has incorrect syntax, if you decide to go with a proxy after all: proxy takes an implicit this
argument, not a named first argument.
这篇关于如何在Clojure中实现Java接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文