Suppose you have a class like this:
public class Student { private String name; private int rollNumber; private int grade; private List subjects; } This is the Subject class public class Subject { private String sName; }
You have an object sObj1 of Student class and it also contains a list of subjects assigned to its instance variable of List type – subjects.
Suppose you want to clone sObj1 into sObj2. There are 2 ways – shallow and deep cloning.
Shallow cloning
Shallow cloning will clone only primitives like rollNumber, grade etc. String type variable ‘name’ is already immutable so that is not a problem. But what happens with list – subjects? It does not clone the subjects, instead only a new reference in memory is created which points to same list of subjects.
For shallow cloning just implement Cloneable interface like this:
public class Student implements Cloneable { //Shallow Cloning method...................... public Object clone() throws CloneNotSupportedException { return super.clone(); } } //this is how to do cloning sObjt2 = (Student) sObjt1.clone(); Deep cloning With deep cloning List can also be cloned but we need to write code for it in the clone method as below: public class Subject implements Cloneable { private String sName; public Object clone() throws CloneNotSupportedException { return super.clone(); } } public class Student implements Cloneable { //Deep Cloning method...................... public Object clone() throws CloneNotSupportedException { Student cloned = (Student) super.clone(); cloned.setSubjects(Student.cloneList(this.subjects())); return cloned; } public static List cloneList(List list) { List clone = new ArrayList(list.size()); for (Subject item: list) clone.add(item.clone()); return clone; } }
Webner Solutions is a Software Development company focused on developing CRM apps (Salesforce, Zoho), LMS Apps (Moodle/Totara), Websites and Mobile apps. If you need Web development or any other software development assistance please contact us at webdevelopment@webners.com