Clojure:使用代理和可变字段
我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,如何才能做到这一点?下面的代码不起作用Clojure:使用代理和可变字段,clojure,Clojure,我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,如何才能做到这一点?下面的代码不起作用 (proxy [BasicPlayer] [] (open [url] (set! super/m_dataSource url))) 从: 注意,虽然方法fns可以 如果要覆盖受保护的方法,则这些方法没有其他访问权限 对于受保护的成员,也不是超级用户,因为这些功能无法 代理 对不起,听起来你好像运气不好。您可以使用代理super调用受保护的超类方法,但我认为仅此而已 如果
(proxy [BasicPlayer] []
(open [url]
(set! super/m_dataSource url)))
从:
注意,虽然方法fns可以
如果要覆盖受保护的方法,则这些方法没有其他访问权限
对于受保护的成员,也不是超级用户,因为这些功能无法
代理
对不起,听起来你好像运气不好。您可以使用代理super
调用受保护的超类方法,但我认为仅此而已
如果使用gen类
,您的运气可能会更好。大致如下:
(ns my.Player
(:gen-class
:extends BasicPlayer
:exposes {m_dataSource {:set -setDataSource}})
(defn -open [this url]
(-setDataSource this url))
能否指定此超类字段的可见性?公共的,受保护的还是私人的。。。因为我认为,如果它是公共的或受保护的,您将可以从代理对象
(打开[this url](set!(.m_dataSource this)url))
?@LeonGrapenthin访问此字段,您的评论实际上是正确的答案;它为我们提供了答案。我不知道set代码>。(当然,Matthew使用了set!
,但我也不知道你可以按照你指定的方式应用它。)Alex的回答只适用于某些情况。如果你再加一个答案,我就投赞成票。