2014-09-25 33 views
1

我想在沒有複製引用的情況下在java中複製一個對象。如何更快地創建/複製Java對象?

Object o1 = new Object(); 
Object o2 = o1; 

但o2不應複製o1的引用。因此,在o2中完成的任何更改都不會影響o1。

我們如何在java中做到這一點?

+0

clone()方法特定於Object類。如果我必須複製某些特定類的對象,我認爲克隆不起作用。 – Setu 2014-09-25 07:00:34

+1

@Setu,正如下面的其他人所指出的那樣,您需要爲特定類重寫'clone'方法。 – munyul 2014-09-25 07:06:24

回答

2

您可以使用Object.clone()的方法克隆對象:

Object o2 = o1.clone(); 
4

您可以覆蓋clone()方法,這將創造整個對象圖(深層副本)的複印件,並創建一個新的對象。

注意:每個班級將繼承Object類的默認clone()實施。但是您必須重寫該方法以根據對象的內容執行復制。

僅供參考:

默認Object.clone()是一個淺拷貝。但是,它的設計爲 會引發CloneNotSupportedException,除非您的對象 實現了Cloneable。

而當你實現Cloneable時,你應該重載clone()以使其 通過在所有 本身可複製的字段上調用clone()來進行深層複製。

0

你應該使用Cloning,那麼你有一個Object

Object obj2=obj.clone(); // clone() in Object class has protected modifier 

副本然後你要重寫clone方法的類。

克隆?

創建並返回此對象的副本。 「複製」的確切含義可能取決於對象的類別。總的意圖是 ,對於任何對象x,表達式:

1

如果需要複製其他類比對象,做一個拷貝構造函數或靜態工廠方法。效果是這樣的:

MyClass o1 = new MyClass(); 
MyClass o2 = new MyClass(o1); // in constructor make new object with data from o1 attributes 

MyClass o1 = new MyClass(); 
MyClass o2 = MyClass.makeCopy(o1); // make static method for create new copy (similar like above) 

不要使用克隆。 - >Effective Java