物件克隆

克隆可能很棘手,尤其是當物件的欄位包含其他物件時。在某些情況下,你需要執行深層複製 ,而不是僅複製欄位值(即對其他物件的引用)。

底線是克隆被破壞 ,你應該在實現 Cloneable 介面和覆蓋 clone 方法之前三思而後行。clone 方法在 Object 類中宣告,而不是在 Cloneable 介面中宣告,因此 Cloneable 無法用作介面,因為它缺少公共 clone 方法。結果是使用 clone 的合同記錄很少並且執行不力。例如,覆蓋 clone 的類有時依賴於其所有父類也會覆蓋 clone。他們沒有強制執行此操作,如果他們不這樣做,你的程式碼可能會丟擲異常。

提供克隆功能的更好解決方案是提供複製建構函式複製工廠。請參閱 Joshua Bloch 的有效 Java 專案 11:明智地覆蓋克隆。