【问题标题】: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 翻译层在创建不仅仅是 reifydefrecord 的类型方面并没有那么丰富,而且我发现做任何花哨的事情都是一个很大的负担,比如处理注释或扩展类。

【讨论】:

    【解决方案2】:

    有这个here的文档

    基于此,我会尝试一些类似的东西

    (deftype ^{Handler true} CC [] ...)
    (.b a (CC.))
    

    没有提到代理/reify 支持,这就是我明确创建一个新类的原因。

    【讨论】:

    • 看来deftype 只支持接口,有没有从类扩展?
    • @swwind 不,没有。有一些有趣的库,比如JiSE,但在这种情况下,最简单的方法是用 java 编写它。如果您告诉我们您的确切用例,可能会有不同的方法来解决它。
    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多