Clojure 代理 Java 模板

标签 clojure

上下文

我有这段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/

相关文章:

sql - 使用 Korma 插入数据库行

tomcat - 如何在部署到 elasticbeanstalk 中的 tomcat 的 clojure ring web 应用程序中关闭 Hikari 连接池

Haskell 函数从左到右

clojure - 数据查询性能改进

ruby - Scala 缺少哪些动态语言(如 Ruby 或 Clojure)的特性?

clojure - 在 Common Lisp 中模拟 Clojure 风格的可调用对象

haskell - 如何在使用惰性序列时观察进度?

clojure - 在 Clojure 序列中修剪循环的不显眼的方法

clojure - 在宏中正确处理符号解析

Java 命令 lastModified() 在 Clojure 中不起作用