我在Clojure中使用代理来扩展Java类。我需要在超类中设置一个字段,我该怎么做?下面的代码不起作用。
(proxy [BasicPlayer] []
(open [url]
(set! super/m_dataSource url)))
答案 0 :(得分:4)
请注意,虽然方法fns可以 提供以覆盖受保护的方法,他们没有其他访问权限 受保护的成员,也不是超级,因为这些能力不可能 代理。
抱歉,听起来好像你运气不好。您可以使用proxy-super
调用受保护的超类方法,但我认为这是关于它的。
gen-class
你可能会有更好的运气。有点像:
(ns my.Player
(:gen-class
:extends BasicPlayer
:exposes {m_dataSource {:set -setDataSource}})
(defn -open [this url]
(-setDataSource this url))