在Clojure中创建Java类的方法有几种,因此在Clojure中选择gen-class
,proxy
和reify
之间的权衡是什么? (还有其他方法可以创建我未列出的Java类吗?)
我的基本理解是,我以降序排列了这些结构。
最佳答案
需要命名类或要向创建的对象添加新方法时,请使用gen-class
。 gen-class
依赖于AOT编译。
如果您想要一种一次性的匿名实现,请使用reify
或proxy
。他们不依赖于AOT编译。这是它们的区别:reify
仅支持协议或接口,proxy
还支持具体的超类。reify
使用真实的类方法,proxy
使用外部函数。
由于#2,reify
使用直接方法查找,而proxy
使用映射进行方法查找。
由于#3,reify
不支持方法的动态交换,但是proxy
支持。reify
的性能将优于proxy
,因此,应尽可能使用reify
。仅当proxy
的约束过于严格时才使用reify
。