java - Clojure gen-class this 关键字

标签 java clojure interop this gen-class

是否可以在 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的更多信息。

对于 RunnableCallable 等您只需要实现一个小型接口(interface)的情况,还可以考虑使用 reify

关于java - Clojure gen-class this 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798775/

相关文章:

c - PICK/BASIC、FlashBASIC 和 C 互操作性

java - 如何从 String2 中删除 String1 并用剩余的字符串构建新的 String2?

java - 如何将类对象从 Scala 传递给 Java?

c# - 如何从 C# 编辑或取消保护 protected Excel 工作表中的单个单元格?

clojure - Clojure 的 "send"和 "send-off"函数在向代理分派(dispatch)操作方面有什么区别?

scala - 如何在Clojure中模拟继承?

java - clojure 是否可以读取和处理编译器生成的类(.class 文件)?

java - 通过 ssh (java) 连接到 mysql 数据库

java - 这是哪种日期时间格式?

java - 我应该把上传的图片放在 java 应用程序的服务器上的什么地方?