java objects are manipulated via reference variables, there is no way to copy an object in java directly..
clone() method of Object class is used to provide a standard copying mechanism. clone() returns an Object, so dont forget to recast.. There is also the shallow copy - deep copy issue to deal with.. In shallow copy only the surface portion of the object is copied, as in the case of
Arraylist s overrided clone().A property of shallow copies is that fields that refer to other objects will point to the same objects in both the original and the clone. (http://javatechniques.com/blog/faster-deep-copies-of-java-objects/)
Copying the object entirely is the deep copy..
In order to make a class with the ability of deep copying itself:
clone() implementation throws CloneNotSupportedException (if class is not implementing Cloneable interface)Cloneable interfaceclone() implementation public and do super.clone() (as in all Collections clone() methods)Object s clone() only makes shallow copy, so write your implementation for a deep copy..public class SampleClass implements Cloneable {... public Object clone() throws CloneNotSupportedException { return super.clone(); }}Serializing and reconstructing when the object is extremely complex, is also a solution to deep copying problem.. Besides, in http://javatechniques.com/blog/faster-deep-copies-of-java-objects/, the code presents a faster way of making deep copy..
http://www.go4expert.com/forums/showthread.php?t=5424
http://www.jguru.com/faq/view.jsp?EID=20435 (this is the solution i used, since i have complex serializable objects..)
Hiç yorum yok:
Yorum Gönder