可能重複:
Java: recommended solution for deep cloning/copying an instance深克隆在Java對象
我有有被克隆的對象。但是,克隆時也應該克隆其內部的對象。這怎麼可能 ??
可能重複:
Java: recommended solution for deep cloning/copying an instance深克隆在Java對象
我有有被克隆的對象。但是,克隆時也應該克隆其內部的對象。這怎麼可能 ??
Java深度克隆庫克隆庫是一個小型開源的深度克隆對象的java庫。對象 不必實現Cloneable接口。有效地,這個 庫可以克隆任何Java對象。
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
所以,這裏是例子cloning。
你需要重寫clone()
方法,例如
public class Person implements Cloneable{
private Long id;
private Address address
@Override
protected Object clone() throws CloneNotSupportedException {
//do deep cloning
}
}
請參見
你必須意識到,這不是一個明確的問題,無法以機械化,全自動的方式正確完成深度複製。以下是一些選項:
clone
協議,但現在在大多數情況下它被認爲不推薦使用;實現深度複製的最簡單方法是序列化然後反序列化對象。看看ObjectInputStream
和ObjectOutputStream
。
深度克隆的最簡單方法是使用Java serialization
,其中您的對象是serialize
和deserialize
並返回反序列化的版本。
這是一個缺點,因爲它引用的類和所有東西都必須是'Serializable'。 – Jesper
克隆的另一種方式是提供一個拷貝構造函數根據所提供的實例的數據來構建一個新的實例:
public MyClass(MyClass instanceToCopy)
{
...
}
好點OP來討論所有的陷阱和正確陷阱頁面實現'clone' :)例如,不要使用'new'創建克隆,而是使用'super.clone'。 –
@ Jigar我認爲你是在談論淺層克隆而不是深層克隆 –
@PramodKumar克隆機制本身既不深也不淺。這取決於你如何實現它。 –