在 Clojure 中创建 Java 类有几种不同的方法,那么在 gen-class
之间进行选择时有哪些权衡? , proxy
, 和 reify
在 Clojure 中? (还有其他方法可以创建我没有列出的 Java 类吗?)
我的基本理解是,我按功率降序列出了这些结构。
最佳答案
使用gen-class
当你想要一个命名类或者你想为你创建的对象添加新方法时。 gen-class
依赖于 AOT 编译。
当你想要一种匿名的一次性实现时,你可以使用 reify
或 proxy
.它们不依赖 AOT 编译。以下是它们的区别:
reify
仅支持协议(protocol)或接口(interface),proxy
还支持具体的父类(super class)。 reify
使用真正的类方法,proxy
使用外部函数。 reify
使用直接方法查找,而 proxy
使用映射进行方法查找。 reify
不支持方法的动态交换,但proxy
做。 reify
将比 proxy
表现更好, 所以你应该总是使用 reify
如果可能。仅使用 proxy
当reify
的约束条件太苛刻了。
关于clojure - 在 Clojure 中创建 Java 类的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831584/