是否可以在 gen 类方法中引用 Java 的“this”关键字?
我正在尝试实现daresm的答案here ,在 Clojure 中。但是,当我尝试在 run 函数中使用“this”时,我收到“java.lang.RuntimeException:无法解析符号:在此上下文中的 this”。
(gen-class
:name ClipboardListener
:extends java.lang.Thread
:implements [java.awt.datatransfer.ClipboardOwner]
:prefix ClipboardListener-
:methods [[takeOwnership [Transferable] void]])
(def systemClipboard (.getSystemClipboard (java.awt.Toolkit/getDefaultToolkit)))
(defn ClipboardListener-run []
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
(defn ClipboardListener-lostOwnership [clipboard trasferable] (prn "hit lost"))
(defn ClipboardListener-takeOwnership [transferable] (prn "hit take"))
(defn processClipboard [transferable clipboard] (prn "hit process"))
注意:这是我第一次在 Clojure 中生成 Java 类,因此非常感谢任何一般反馈/资源。
最佳答案
实例方法可以采用隐式“self”arg- 作为第一个参数。以您为例:
(defn ClipboardListener-run [this]
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
注意 this
参数:)
对于任何实例方法都是如此,例如:
(defn ClipboardListener-toString [this]
"override Object#toString with something cool")
看看this (没有双关语)有关gen-class的更多信息。
对于 Runnable
、Callable
等您只需要实现一个小型接口(interface)的情况,还可以考虑使用 reify
。
关于java - Clojure gen-class this 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798775/