【问题标题】:Use java annotations in clojure在clojure中使用java注解
【发布时间】:2020-09-02 10:50:50
【问题描述】:
a.b(new C() {
@Handler
public void d() {
System.out.println("hello world");
}
});
我试着把它翻译成clojure:
(.b a (proxy [C] []
(^{Handler {}}
d [] (println "hello world"))))
但不幸的是它不起作用。
这是正确的吗?我应该如何为方法添加java注解?
【问题讨论】:
标签:
java
clojure
annotations
【解决方案1】:
我通常建议用 Java 编写互操作代码:提供符合 Java 要求的 API,并通过调用 Clojure 函数来实现它。 Clojure->Java 翻译层在创建不仅仅是 reify 或 defrecord 的类型方面并没有那么丰富,而且我发现做任何花哨的事情都是一个很大的负担,比如处理注释或扩展类。
【解决方案2】:
有这个here的文档
基于此,我会尝试一些类似的东西
(deftype ^{Handler true} CC [] ...)
(.b a (CC.))
没有提到代理/reify 支持,这就是我明确创建一个新类的原因。
【讨论】:
-
-
@swwind 不,没有。有一些有趣的库,比如JiSE,但在这种情况下,最简单的方法是用 java 编写它。如果您告诉我们您的确切用例,可能会有不同的方法来解决它。