In terms of "best practices", which methodology is preferred for creating a "deep copy" of an object?
Use a copy constructor. Cloneable
is a straight-up API disaster. See Effective Java Item 10 (Item 11 in the 2nd. ed.).
Item 11: Override
clone
judiciouslyThe
Cloneable
interface was intended as a mixin interface (item 18) for objects to advertise that they permit cloning. Unfortunately, it fails to serve this purpose. Its primary flaw is that it lacks aclone
method, andObject
'sclone
method is protected. You cannot, without resorting to reflection (Item 53), invoke theclone
method on an object merely because it implementsCloneable
. Even a reflective invocation may fail, as there is no guarantee that the object has an accessibleclone
method.
There is nothing wrong with the general idea of a cloneable interface. It is easier than copy constructor for API users .
The problems with Java's Cloneable
and Object.clone
are not that bad either; they can be overcome with a little effort. And you can always have your own cloneable interface.
Java 8 could fix Cloneable
by adding the clone()
method with a default implementation
interface Cloneable
public Object clone() default { return Cloneables.defaultClone(this); }
not sure they have any plan to do so.
UnsupportedOperationException
would be a safer default implementation for objects that haven't explicitly defined clone()..... –
Exude © 2022 - 2024 — McMap. All rights reserved.