如何在Clojure中实现Java接口 [英] How do I implement a Java interface in Clojure

查看:124
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆