Clojure:使用代理和可变字段

时间:2014-04-25 12:55:27

标签: clojure

我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,我该怎么做?下面的代码不起作用。

(proxy [BasicPlayer] []
  (open [url]
  (set! super/m_dataSource url)))

1 个答案:

答案 0 :(得分:4)

来自documentation for proxy

  

请注意,虽然方法fns可以   提供以覆盖受保护的方法,他们没有其他访问权限   受保护的成员,也不是超级,因为这些能力不可能   代理。

抱歉,听起来好像你运气不好。您可以使用proxy-super调用受保护的超类方法,但我认为这是关于它的。

gen-class你可能会有更好的运气。有点像:

(ns my.Player
  (:gen-class
   :extends BasicPlayer 
   :exposes {m_dataSource {:set -setDataSource}})

(defn -open [this url]
  (-setDataSource this url))