Sunday, 8 July 2018

Deep cloning using copy constructor in java

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



No comments:

Post a Comment