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:

  1. Override Object’s clone( ) method.

  2. 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.