2011-04-28 29 views

回答

5

代理中的每個方法都應該重寫超類方法或接口方法,所以它與可以添加新方法的Java類稍有不同。因此,如果Clojure提供了一種將代理方法標記爲覆蓋的方法,那麼所有有效的代理都會爲每種方法添加註釋。

不幸的是,Clojure會讓你在代理中定義一個方法,該代理不屬於代理覆蓋的任何類或接口。但是,該方法在正常使用中不可調用或訪問。

+2

No:你不能確保覆蓋使用代理的現有方法,如使用java @Override註釋:(proxy [Object] [](nonExistingBaseMethod []「Foo」)) – 2011-04-28 16:38:52

+1

評論是正確的,答案錯誤。 @Override的目的是提供一個檢查,說明如此註釋的方法實際上是按照預期覆蓋現有方法,而不是意外聲明新方法。 'proxy'不提供這樣的保護。 – 2011-04-28 18:12:15

+2

我編輯了我的答案,解釋了爲什麼Clojure沒有註解(代理中的每個方法都有它),並且指出它不會阻止您定義不會覆蓋任何內容的函數。 – Brigham 2011-04-28 18:54:28