The Clone Method
Problem
You want to clone yourself. Or at least your objects.
Solution
Override Object.clone( )
.
Discussion
To clone something is to make a duplicate of
it. The clone( )
method in Java makes an exact
duplicate of an object. Why do we need cloning? Java’s method
calling semantics are call-by-reference, which allows the
called method to modify the state of an object that is passed into
it. Cloning the input object before calling the method would pass a
copy of the object, keeping your original safe.
How can you clone? Cloning is not “enabled” by default in classes that you write.
Object o = new Object( ); Object o2 = o.clone( );
If you try calling clone( )
without any special
preparation, as in this excerpt from
Clone0.java
, you will see a message like this
(from the Jikes compiler; the javac message may
not be as informative):
Clone0.java:4:29:4:37: Error: Method "java.lang.Object clone( );" in class "java/ lang/Object" has protected or default access. Therefore, it is not accessible in class "Clone0" which is in a different package.
You must take two steps to make your class cloneable:
Override
Object
’sclone( )
method.Implement the empty Cloneable interface.
Using cloning
The class java.lang.Object
declares its clone
protected and
native
.
Protected
classes can be called by a subclass or those in the same package
(i.e., java.lang
), but not by unrelated classes.
That is, you can call Object.clone( )
-- the native method that does the magic of duplicating the object -- only ...
Get Java Cookbook now with O’Reilly online learning.
O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.