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
Lets check if it is really working
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
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