Clojure代理Java模板

3 clojure

上下文

我有这段Java代码

    btn.setOnAction(new EventHandler<ActionEvent>() {

        public void handle(ActionEvent event) {
            System.out.println("Hello World");
        }
    });
Run Code Online (Sandbox Code Playgroud)

我想把它转换成Clojure.

我知道的

(. btn setOnAction (proxy .... ????? .... ))
Run Code Online (Sandbox Code Playgroud)

题:

如何在Clojure中处理EventHandler部分?我相信这是一个Java模板.如何在Clojure中创建模板化对象?

sku*_*uro 6

在Java中,它们被称为泛型,而不是模板.此外,它们是使用类型擦除实现的,即在编译的字节码中没有通用信息,因此EventHandler<Foobar>对象被编译为非泛化的EventHandler实例.

也就是说,Clojure甚至都没有尝试过支持他们.您的Java代码转换为

(.setOnAction btn 
  (proxy [EventHandler] []
    (handle [event]
      (println "Hello World"))))
Run Code Online (Sandbox Code Playgroud)

有关语法的更多详细信息,请参阅Java interopproxy和文档上的文档.