About this blog

Sunday, October 2, 2011

Sample Code for Deep and Shallow Cloning ~ Java

0 comments
Was just going over deep and shallow cloning a few days back.. thought of retaining the doodling bit of code as a memento .. its unnecessarily lengthy ... could've overriden the tostring method to reduce the length of the system.out.printlns .. but then the sample is just for my reference so dint go through the trouble ... use at ur own fancy and convenience .... anyways, the following is the code:::


public class TestCloning {
public static void main(String[] somestuff) {
System.out.println("<<---------Trying out shallow cloning------>>>");
A a = new A();
A aClone = (A) a.clone();
System.out.println("Original Object items:\n BUilder: "
+ a.getStrBuilder() + "\n BUffer: " + a.getStrBuffer()
+ "\n Printing the clone properties -->\n BUilder: "
+ aClone.getStrBuilder() + "\n BUffer: "
+ aClone.getStrBuffer());
System.out
.println("\n Modifying the builder of original object to \'GUilder\'.....\n");
a.setStrBuilder("GUilder");
System.out
.println("after modfiication Original Object items:\n BUilder: "
+ a.getStrBuilder()
+ "\n BUffer: "
+ a.getStrBuffer()
+ "\n Printing the clone properties -->\n BUilder: "
+ aClone.getStrBuilder()
+ "\n BUffer: "
+ aClone.getStrBuffer());
System.out.println("<<--------End of shallow cloning: ---->>\n");


System.out.println("\n<<-----------Trying out deep cloning------>>");
B b = new B();
B bClone = (B) b.clone();
System.out.println("Original Object items:\n BUilder: "
+ b.getStrBuilder() + "\n BUffer: " + b.getStrBuffer()
+ "\n Printing the clone properties -->\n BUilder: "
+ bClone.getStrBuilder() + "\n BUffer: "
+ bClone.getStrBuffer());
System.out
.println("\n Modifying the builder of original object to \'GUilder\'.....\n");
b.setStrBuilder("GUilder");
System.out
.println("after modfiication Original Object items:\n BUilder: "
+ b.getStrBuilder()
+ "\n BUffer: "
+ b.getStrBuffer()
+ "\n Printing the clone properties -->\n BUilder: "
+ bClone.getStrBuilder()
+ "\n BUffer: "
+ bClone.getStrBuffer());
System.out.println("<<--------------End of Deep cloning: ---->>");


}


}


class A implements Cloneable {
private StringBuilder strBuilder = null;
private StringBuffer strBuffer = null;


A() {
strBuilder = new StringBuilder("Java Builder");
strBuffer = new StringBuffer("Java Buffer");
}


@Override
public A clone() {
try {
return (A) super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
return null;
}
}


public StringBuilder getStrBuilder() {
return strBuilder;
}


public void setStrBuilder(String str) {
this.strBuilder = strBuilder.replace(0, strBuilder.length(), str);
}


public StringBuffer getStrBuffer() {
return strBuffer;
}
}


class B implements Cloneable {
private StringBuilder strBuilder = new StringBuilder("Java Builder");
private StringBuffer strBuffer = new StringBuffer("Java Buffer");


private B(String a, String b) {
this.strBuilder = new StringBuilder(a);
this.strBuffer = new StringBuffer(b);
}


public B() {
// TODO Auto-generated constructor stub
}


@Override
public B clone() {
return new B("Java Builder", "Java Buffer");
}


public StringBuilder getStrBuilder() {
return strBuilder;
}


public void setStrBuilder(String str) {
this.strBuilder = strBuilder.replace(0, strBuilder.length(), str);
}


public StringBuffer getStrBuffer() {
return strBuffer;
}
}