previous i have shown how to do a shallow and deep cloning ion java , Though i uses Deep cloning in my project . Deep cloning has lot of drawbacks and i hate the casting ,and exception handling in cloning
Let's see with an example
There are two classed in this Example , Person.java and Adress.java Person.java has an Adress
package sample;
import com.solo.Adress;public class Person {
private String name; private String age; private Adress adress;
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getAge() {
return age; }
public Adress getAdress() {
return adress; }
public void setAdress(Adress adress) {
this.adress = adress; }
public void setAge(String age) {
this.age = age; }
@Override public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
"adress=" + adress+ '\'' +
'}'; }
public Person(String name, String age, Adress adress) {
this.name = name; this.age = age; this.adress = adress; }
public Person(Person thatperson) {
this.name = thatperson.getName(); this.age = thatperson.age; this.adress = new Adress(thatperson.getAdress()); }
}
package com.solo;
public class Adress {
private String streeetname; private String doornumber; private String pincode;
public String getStreeetname() {
return streeetname; }
public void setStreeetname(String streeetname) {
this.streeetname = streeetname; }
public String getDoornumber() {
return doornumber; }
public void setDoornumber(String doornumber) {
this.doornumber = doornumber; }
public String getPincode() {
return pincode; }
@Override public String toString() {
return "Adress{" +
"streeetname='" + streeetname + '\'' +
", doornumber='" + doornumber + '\'' +
", pincode='" + pincode + '\'' +
'}'; }
public void setPincode(String pincode) {
this.pincode = pincode; }
public Adress(String streeetname, String doornumber, String pincode) {
this.streeetname = streeetname; this.doornumber = doornumber; this.pincode = pincode; }
public Adress(Adress that) {
this.pincode = that.pincode; this.doornumber = that.doornumber; this.streeetname = that.streeetname; }
}
Lets check if it is really working
package sample;
import com.solo.Adress;
public class Main {
public static void main(String[] args) {
Adress adress = new Adress("dandesshwaram","10","629003"); Person p1 = new Person("solomon","31",adress); System.out.println(p1); System.out.println("-------------------- After changing the Adress---------------"); System.out.println("taking copy constructor"); Person p2 = new Person(p1);
System.out.println("changing persons 1 adress"); p1.getAdress().setDoornumber("5"); p1.getAdress().setPincode("600032");
System.out.println("checking if the changes has affected the second reference");
System.out.println(p1); System.out.println(p2); }
}
Lets run and see if is working
Person{name='solomon', age='31'adress=Adress{streeetname='dandesshwaram', doornumber='10', pincode='629003'}'}
-------------------- After changing the Adress---------------
taking copy constructor
changing persons 1 adress
checking if the changes has affected the second reference
Person{name='solomon', age='31'adress=Adress{streeetname='dandesshwaram', doornumber='5', pincode='600032'}'}
Person{name='solomon', age='31'adress=Adress{streeetname='dandesshwaram', doornumber='10', pincode='629003'}'}
oops it is working easy as a PIE