java - 创建一个扩展类的类,并在 clojure 中覆盖

标签 java oop clojure jvm

我有非常简单的 java 代码:

public class MessageListenerExample extends ListenerAdapter
{
    @Override
    public void onMessageReceived(MessageReceivedEvent event)
    {
        // do something with event
    }
}

但是,我似乎无法理解如何将该代码转换为 clojure 代码。文档和文章非常困惑。我也很乐意看到更多示例。我也对使用 implements 感兴趣。

最佳答案

您可以使用 proxy扩展现有的 Java 类并实现接口(interface)。例如:

(import '[java.awt.event ActionListener ActionEvent KeyAdapter KeyEvent])

(def listener
  (proxy
    ;; first vector contains superclass and interfaces that the created class should extend/implement
    [KeyAdapter ActionListener]
    ;; second vector contains arguments to superclass constructor
    []
    ;; below are all overriden/implemented methods
    (keyPressed [event]
      (println "Key pressed" event))
    (actionPerformed [action]
      (println "Action performed" action))))

(.keyPressed listener nil)
;; => Key pressed nil

(.actionPerformed listener nil)
;; => Action performed nil

关于java - 创建一个扩展类的类,并在 clojure 中覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38573470/

相关文章:

java - 改造后请求空体

java - 从另一种方法获取字符串?

javascript - 更好的 JavaScript 对象初始化

java - 共享串口(Modem协议(protocol)+拨号器)

c# - 静态类继承抽象类?

java - 在 Java 中保留泛型的封装

clojure - 在 Clojure 中导入什么 -?> ?

clojure - 在 Clojure 中嵌套宏

java - 带有 clojure.lang.PersistentHashMap 的 ObjectInputStream

java - HQL : Adding colon seperated strings for multiple parameters to search with