在Clojure中创建Java类的方法有几种,因此在Clojure中选择gen-classproxyreify之间的权衡是什么? (还有其他方法可以创建我未列出的Java类吗?)

我的基本理解是,我以降序排列了这些结构。

最佳答案

需要命名类或要向创建的对象添加新方法时,请使用gen-classgen-class依赖于AOT编译。

如果您想要一种一次性的匿名实现,请使用reifyproxy。他们不依赖于AOT编译。这是它们的区别:


reify仅支持协议或接口,proxy还支持具体的超类。
reify使用真实的类方法,proxy使用外部函数。
由于#2,reify使用直接方法查找,而proxy使用映射进行方法查找。
由于#3,reify不支持方法的动态交换,但是proxy支持。


reify的性能将优于proxy,因此,应尽可能使用reify。仅当proxy的约束过于严格时才使用reify

09-25 22:07