In java it's a bit difficult to implement a deep object copy function. What steps you take to ensure the original object and the cloned one share no reference?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
1)
Here your MyPerson and MyAddress class must implement serilazable interface
A few people have mentioned using or overriding
Object.clone()
. Don't do it.Object.clone()
has some major problems, and its use is discouraged in most cases. Please see Item 11, from "Effective Java" by Joshua Bloch for a complete answer. I believe you can safely useObject.clone()
on primitive type arrays, but apart from that you need to be judicious about properly using and overriding clone.The schemes that rely on serialization (XML or otherwise) are kludgy.
There is no easy answer here. If you want to deep copy an object you will have to traverse the object graph and copy each child object explicitly via the object's copy constructor or a static factory method that in turn deep copies the child object. Immutables (e.g.
String
s) do not need to be copied. As an aside, you should favor immutability for this reason.A safe way is to serialize the object, then deserialize. This ensures everything is a brand new reference.
Here's an article about how to do this efficiently.
Caveats: It's possible for classes to override serialization such that new instances are not created, e.g. for singletons. Also this of course doesn't work if your classes aren't Serializable.
I used Dozer for cloning java objects and it's great at that , Kryo library is another great alternative.
BeanUtils does a really good job deep cloning beans.