上下文
我有这段Java代码
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
我想将其转换为 Clojure。
我所知道的
(. btn setOnAction (proxy .... ????? .... ))
问题:
如何处理 Clojure 中的 EventHandler 部分?我相信这是一个 Java 模板。如何在 Clojure 中创建模板化对象?
最佳答案
在 Java 中,它们被称为 Generics ,而不是模板。此外,它们是使用类型删除来实现的,即没有通用信息 in the compiled bytecode ,这样 EventHandler<Foobar>
对象被编译为非泛化的 EventHandler
实例。
也就是说,Clojure 甚至没有尝试支持它们。您的 Java 代码会转换为
(.setOnAction btn
(proxy [EventHandler] []
(handle [event]
(println "Hello World"))))
请参阅 proxy
上的文档以及 Java interop有关语法的更多详细信息。
关于Clojure 代理 Java 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120727/