Sundarrajk's Weblog

PMD – Clone Rules

Posted on: September 28, 2011

This is the twenty second installment of explanation of PMD rules covering Cloning of objects.

Clone Implementation Rules

The Clone Implementation ruleset contains a collection of rules that find questionable usages of the clone() method.
Clone is a method used to create a copy of objects in Java. The resulting object must be an exact replica of the object from which it was cloned. It is important to note that in the process of cloning if we use a statement like
this.attribute = classcloned.attribute
will only achieve a shallow copy as only the reference of the object attribute will be copied into the cloned class. Any changes to attribute in the clone will impact the original object. Instead we should use
this.attribute = classcloned.attribute,clone()
This will ensure that the cloned object gets a cloned copy of the attribute object too.


Object clone() should be implemented with super.clone().


class Foo{
    public Object clone(){
        return new Foo(); // This is bad


The method clone() should throw a CloneNotSupportedException.


public class MyClass implements Cloneable{
     public Object clone() { // will cause an error
          MyClass clone = (MyClass)super.clone();
          return clone;


The method clone() should only be implemented if the class implements the Cloneable interface with the exception of a final method that only throws CloneNotSupportedException.


public class MyClass {
public Object clone() throws CloneNotSupportedException {
  return foo;

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s


%d bloggers like this: