2012-06-25 174 views

回答

1

Java深度克隆庫克隆庫是一個小型開源的深度克隆對象的java庫。對象 不必實現Cloneable接口。有效地,這個 庫可以克隆任何Java對象。

Cloner cloner = new Cloner(); 
MyClass clone = cloner.deepClone(o); 

所以,這裏是例子cloning

2

你需要重寫clone()方法,例如

public class Person implements Cloneable{ 
private Long id; 
private Address address 

    @Override 
    protected Object clone() throws CloneNotSupportedException { 
    //do deep cloning 
    } 

} 

請參見

+0

好點OP來討論所有的陷阱和正確陷阱頁面實現'clone' :)例如,不要使用'new'創建克隆,而是使用'super.clone'。 –

+0

@ Jigar我認爲你是在談論淺層克隆而不是深層克隆 –

+0

@PramodKumar克隆機制本身既不深也不淺。這取決於你如何實現它。 –

6

你必須意識到,這不是一個明確的問題,無法以機械化,全自動的方式正確完成深度複製。以下是一些選項:

  • Java有clone協議,但現在在大多數情況下它被認爲不推薦使用;
  • 您可以使用序列化來序列化 - 反序列化內存中;
  • 你可以編寫所謂的拷貝構造函數。
0

實現深度複製的最簡單方法是序列化然後反序列化對象。看看ObjectInputStreamObjectOutputStream

0

深度克隆的最簡單方法是使用Java serialization,其中您的對象是serializedeserialize並返回反序列化的版本。

+0

這是一個缺點,因爲它引用的類和所有東西都必須是'Serializable'。 – Jesper

0

克隆的另一種方式是提供一個拷貝構造函數根據所提供的實例的數據來構建一個新的實例:

public MyClass(MyClass instanceToCopy) 
{ 
    ... 
}