主要观点:介绍了 Clojure 与 Java 互操作的一些问题及相关示例,包括gen-class
宏的使用、接口方法重载、默认接口实现等方面的观察和建议。
关键信息:
gen-class
宏可在 Clojure 中创建“Java”类,指定实现的接口等。- 接口方法的参数数量与 Clojure 函数参数数量匹配,可改变 Clojure 代码而无需重启 JVM。
- 对于参数类型不同的重载,可通过特定函数命名方式来区分。
- Java 接口的默认实现在 Clojure 中可能存在问题,可能导致编译器错误。
重要细节: - 在
IThing
接口中有多个doWithThing
方法的重载,不同的调用会找到不同的 Clojure 函数。 - 在
test/thingi.clj
中通过gen-class
创建类并实现接口方法,可在 REPL 中进行测试。 - 对于不同类型的参数重载,可使用特定命名的函数来定义具体的重载实现。
- 在 Java 接口添加默认实现后,在 Clojure 中可能会出现编译器错误,如在 Kafka 客户端代码中的示例。
参考资料: - 原始 Clojure 邮件列表帖子讨论秘密
gen-class
重载机制 - 至少一个 StackOverflow 帖子引用上述帖子并提供该技术作为答案
- Clojure Jira 工单用于默认实现错误
- Slack 线程中 Alex Miller 预测默认实现可能获得支持的时间
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。