gpt4 book ai didi

java - Clojure gen-class this 关键字

转载 作者:行者123 更新时间:2023-11-30 07:55:53 26 4
gpt4 key购买 nike

是否可以在 gen 类方法中引用 Java 的“this”关键字?

我正在尝试实现 daredesm 的答案 here , 在 Clojure 中。但是,当我尝试在运行函数中使用“this”时,我得到“java.lang.RuntimeException:无法解析符号:this in this context。”

(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com