clojure - 在 Clojure 中创建 Java 类的选项

标签 clojure clojure-java-interop

在 Clojure 中创建 Java 类有几种不同的方法,那么在 gen-class 之间进行选择时有哪些权衡? , proxy , 和 reify 在 Clojure 中? (还有其他方法可以创建我没有列出的 Java 类吗?)

我的基本理解是,我按功率降序列出了这些结构。

最佳答案

使用gen-class当你想要一个命名类或者你想为你创建的对象添加新方法时。 gen-class依赖于 AOT 编译。

当你想要一种匿名的一次性实现时,你可以使用 reifyproxy .它们不依赖 AOT 编译。以下是它们的区别:

  • reify仅支持协议(protocol)或接口(interface),proxy还支持具体的父类(super class)。
  • reify使用真正的类方法,proxy使用外部函数。
  • 因为#2,reify使用直接方法查找,而 proxy使用映射进行方法查找。
  • 因为#3,reify不支持方法的动态交换,但proxy做。
  • reify将比 proxy 表现更好, 所以你应该总是使用 reify如果可能。仅使用 proxyreify的约束条件太苛刻了。

    关于clojure - 在 Clojure 中创建 Java 类的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831584/

    相关文章:

    clojure - 如何通过 REPL 探索 Java 方法

    clojure - clojure.core/compare 如何实现 java.util.Comparator?

    clojure - clojure编译器生成的字节码中的 "public static {}"是什么意思?

    Clojure pmap 返回与 map 不同的结果

    java - 什么 "require"语句使用 Clojars 的 Java 库

    clojure 行为 (into {} '(( :a :b) (:c :d)))

    clojure - 是否可以将 Clojure 的案例形式与 Java 枚举一起使用?

    python - Python 生成器是否有 `let` 或 `as` 关键字?

    clojure - 使用打嗝渲染异步脚本标签

    clojure - 为什么 Clojure 有 5 种定义类的方法而不是只有一种?