我想在沒有複製引用的情況下在java中複製一個對象。如何更快地創建/複製Java對象?
Object o1 = new Object();
Object o2 = o1;
但o2不應複製o1的引用。因此,在o2中完成的任何更改都不會影響o1。
我們如何在java中做到這一點?
我想在沒有複製引用的情況下在java中複製一個對象。如何更快地創建/複製Java對象?
Object o1 = new Object();
Object o2 = o1;
但o2不應複製o1的引用。因此,在o2中完成的任何更改都不會影響o1。
我們如何在java中做到這一點?
您可以使用Object.clone()的方法克隆對象:
Object o2 = o1.clone();
您可以覆蓋clone()
方法,這將創造整個對象圖(深層副本)的複印件,並創建一個新的對象。
注意:每個班級將繼承Object類的默認clone()
實施。但是您必須重寫該方法以根據對象的內容執行復制。
僅供參考:
默認Object.clone()是一個淺拷貝。但是,它的設計爲 會引發CloneNotSupportedException,除非您的對象 實現了Cloneable。
而當你實現Cloneable時,你應該重載clone()以使其 通過在所有 本身可複製的字段上調用clone()來進行深層複製。
你應該使用Cloning,那麼你有一個Object
Object obj2=obj.clone(); // clone() in Object class has protected modifier
副本然後你要重寫clone方法的類。
克隆?
創建並返回此對象的副本。 「複製」的確切含義可能取決於對象的類別。總的意圖是 ,對於任何對象x,表達式:
如果需要複製其他類比對象,做一個拷貝構造函數或靜態工廠方法。效果是這樣的:
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
clone()方法特定於Object類。如果我必須複製某些特定類的對象,我認爲克隆不起作用。 – Setu 2014-09-25 07:00:34
@Setu,正如下面的其他人所指出的那樣,您需要爲特定類重寫'clone'方法。 – munyul 2014-09-25 07:06:24