2013-01-25 47 views
0

警告如何消除反射來自試圖調用Java clone方法本Clojure的代碼警告:刪除反射的.clone

(defn clone-foo [m] 
    (.clone m)) 
=> Reflection warning, NO_SOURCE_PATH:2 - reference to field clone can't be resolved. 

當然,如果m爲java.lang.Object任何情況下它必須有clone方法?

這是否與clone受保護有關?

回答

2

是的,您不能在任意Object上撥打clone()。而且,由於沒有公開clone()方法,因此以「通用」方式克隆事物有點困難。這是來自java早期的剩餘部分之一,現在已經太遲以至於無法改變。如果您控制所有需要克隆的對象,則可以創建自己的ReallyCloneable界面,該界面將公開clone()方法,或者您可以使用反射來玩自己的技巧。

+0

謝謝。推測使用Java 8中的默認接口方法,他們會解決這個問題,並將clone()添加到Cloneable? – mikera

+0

@mikera - 嘿,這同樣的想法也發生在我身上,但我認爲這不會有幫助。我認爲你可以將clone()添加到Cloneable中,因爲Object有一個clone()方法。必須有另一個原因爲什麼沒有完成。 – jtahlborn