clone()
method and set each field manually. This can be pretty cumbersome to implement for complex objects or if you have to do this for a lot of them.A simpler way to deep copy an object is to serialize it and then deserialize to get a new instance.
Let's check out a few examples.
Deep Copy using Spring's SerializationUtils
//import org.springframework.util.SerializationUtils; byte[] sourceInBytes = SerializationUtils.serialize(sourceInstance); Object newInstance = SerializationUtils.deserialize(sourceInBytes);
Since we are using java serialization here, the Class needs to implement
Serializable
.
Deep Copy using Apache Commons Lang SerializationUtils
//import org.apache.commons.lang.SerializationUtils Object newInstance = SerializationUtils.clone(sourceInstance);
Just like above example, this one needs the POJO to implement
Serializable
.Deep Copy through JSON serialization
//import org.codehaus.jackson.map.ObjectMapper; //import org.codehaus.jackson.map.ObjectMapper.DefaultTyping; ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(DefaultTyping.NON_FINAL); String jsonSource = mapper.writeValueAsString(sourceInstance); MyClass newInstance = mapper.readValue(jsonSource, MyClass.class);
The advantage with JSON is that the Class need not implement a Serializable interface. It just needs to be a POJO with a public no-arg constructor and getters/setters for the properties. enableDefaultTyping here ensures that the Polymorphic Type Handling is taken care of.
No comments:
Post a Comment