public interface IExplicitlyCloneable extends Cloneable
Cloneable but in a more explicit
way. Note: cannot use a type argument for the result of "clone" because
otherwise this interface cannot be used on multiple levels of the inheritance
tree. So implementing classes should just change the return type accordingly.| Modifier and Type | Method and Description |
|---|---|
Object |
clone()
Creates and returns a copy of this object.
|
@Nonnull Object clone() throws CloneNotSupportedException
x, the expression: will be true, and that the expression:x.clone () != x
will bex.clone ().getClass () == x.getClass ()
true, but these are not absolute
requirements. While it is typically the case that: will bex.clone ().equals (x)
true, this is not an absolute requirement.
By convention, the returned object should be obtained by calling
super.clone. If a class and all of its superclasses (except
Object) obey this convention, it will be the case that
x.clone().getClass() == x.getClass().
By convention, the object returned by this method should be independent of
this object (which is being cloned). To achieve this independence, it may
be necessary to modify one or more fields of the object returned by
super.clone before returning it. Typically, this means copying any
mutable objects that comprise the internal "deep structure" of the object
being cloned and replacing the references to these objects with references
to the copies. If a class contains only primitive fields or references to
immutable objects, then it is usually the case that no fields in the object
returned by super.clone need to be modified.
The method clone for class Object performs a specific
cloning operation. First, if the class of this object does not implement
the interface Cloneable, then a CloneNotSupportedException
is thrown. Note that all arrays are considered to implement the interface
Cloneable and that the return type of the clone method of
an array type T[] is T[] where T is any reference or
primitive type. Otherwise, this method creates a new instance of the class
of this object and initializes all its fields with exactly the contents of
the corresponding fields of this object, as if by assignment; the contents
of the fields are not themselves cloned. Thus, this method performs a
"shallow copy" of this object, not a "deep copy" operation.
The class Object does not itself implement the interface
Cloneable, so calling the clone method on an object whose
class is Object will result in throwing an exception at run time.
CloneNotSupportedException - if the object's class does not support the Cloneable
interface. Subclasses that override the clone method can
also throw this exception to indicate that an instance cannot be
cloned.CloneableCopyright © 2014–2019 Philip Helger. All rights reserved.