2014-04-25 23 views
2

我在Clojure中使用代理來擴展Java類。我需要在超類中設置一個字段,我該怎麼做?下面的代碼不起作用。Clojure:使用代理和可變字段

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

你能指定這個超類字段的可見性嗎?公共的,受保護的或私人的......因爲我認爲如果它是公共的或者受保護的,你將有權從你的代理對象 – tangrammer

+1

'(open [this url](set!(.m_dataSource this)url))''''' –

+0

@LeonGrapenthin,你的評論其實是一個正確的答案;它爲[我的重複問題](http://stackoverflow.com/q/30060080/1455243)提供了答案。我不知道'set!'。 (當然,馬修使用了'set!',但我也不知道你可以按照你指定的方式來應用它。)Alex的回答只適用於某些情況。如果你添加一個答案,我會贊成它。 – Mars

回答

4

documentation for proxy

請注意,雖然可以 提供方法FNS覆蓋保護的方法,他們沒有其他接入 到受保護的成員,也不是超級的,因爲這些功能不能 代理。

對不起,但它聽起來像你運氣不好。你可以用proxy-super來調用受保護的超類方法,但我認爲這是關於它的。

gen-class可能會有更好的運氣。沿線的東西: