Search code examples
javadeep-copy

Chained Java Deep Copy?


I understand how to do a java deep copy using Serializable and Streams but as long as the object to copy has only primitive data types. In my case I have a parent class that contains among primitive data types an ArrayList of a child class, and they also need to be deep copied.

Can someone please point me to the right direction to do it?

UPDATE:

I thought it was working but I just realize it is not.

This is what I have.

public class Pack implements Serializable
      {
      String ID;
      String serviceCode;
      String name;
      String type;
      ArrayList<Service> services;
      public Pack deepClone()
      {
        try 
            {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            Pack clone = (Pack) ois.readObject();
            clone.setID(null);
            clone.setType("Replica");
            return clone;
            } 
            catch (IOException e) 
                {
                return null;
                }
            catch (ClassNotFoundException e) 
                {
                    return null;
                }
        }
      }


public class Service implements Serializable
     {
     String ID;
     String serviceCode;
     String name;
     }

Now after cloning a Parent class a get a nice clone but the services array is null.

UPDATE:

Sorry my mistake, it was the lack of sleep. It is indeed working.


Solution

  • Just need to make sure the object of that array list also implements serializable, ie your child class