物件克隆
克隆可能很棘手,尤其是當物件的欄位包含其他物件時。在某些情況下,你需要執行深層複製 ,而不是僅複製欄位值(即對其他物件的引用)。
底線是克隆被破壞 ,你應該在實現 Cloneable
介面和覆蓋 clone
方法之前三思而後行。clone
方法在 Object
類中宣告,而不是在 Cloneable
介面中宣告,因此 Cloneable
無法用作介面,因為它缺少公共 clone
方法。結果是使用 clone
的合同記錄很少並且執行不力。例如,覆蓋 clone
的類有時依賴於其所有父類也會覆蓋 clone
。他們沒有強制執行此操作,如果他們不這樣做,你的程式碼可能會丟擲異常。
提供克隆功能的更好解決方案是提供複製建構函式或複製工廠。請參閱 Joshua Bloch 的有效 Java 專案 11:明智地覆蓋克隆。