Clojure:使用代理和可变字段

Clojure:使用代理和可变字段,clojure,Clojure,我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,如何才能做到这一点?下面的代码不起作用 (proxy [BasicPlayer] [] (open [url] (set! super/m_dataSource url))) 从: 注意,虽然方法fns可以 如果要覆盖受保护的方法,则这些方法没有其他访问权限 对于受保护的成员,也不是超级用户,因为这些功能无法 代理 对不起,听起来你好像运气不好。您可以使用代理super调用受保护的超类方法,但我认为仅此而已 如果

我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,如何才能做到这一点?下面的代码不起作用

(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的回答只适用于某些情况。如果你再加一个答案,我就投赞成票。