可以在gen类方法中引用Java的“this”关键字吗?
我正在尝试实现daredesm的答案这里,在Clojure中。但是,当我试图在run函数中使用' this‘时,我得到了"java.lang.RuntimeException:无法解析符号:这个上下文中的符号“。
(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类,因此非常感谢任何一般性的反馈/资源。
发布于 2017-03-15 01:01:52
实例方法可以使用隐式“self”arg作为第一个参数。因此,以你为例:
(defn ClipboardListener-run [this]
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))注意this参数:)
任何实例方法也是如此,例如:
(defn ClipboardListener-toString [this]
"override Object#toString with something cool")查看这 (无双关意),以获得更多关于gen类的信息。
还可以考虑reify,例如Runnable、Callable、e.t.c,在这些情况下,您只需要实现一个小型的ish接口。
https://stackoverflow.com/questions/42798775
复制相似问题