链式Java深度复制?

链式Java深度复制?,java,deep-copy,Java,Deep Copy,我了解如何使用Serializable和Streams进行java深度复制,但前提是要复制的对象只有基本数据类型。在我的例子中,我有一个父类,它在基本数据类型中包含一个子类的ArrayList,并且它们还需要深度复制 有人能给我指一下正确的方向吗 更新: 我以为它在起作用,但我才意识到它不起作用 这就是我所拥有的 public class Pack implements Serializable { String ID; String serviceCode;

我了解如何使用Serializable和Streams进行java深度复制,但前提是要复制的对象只有基本数据类型。在我的例子中,我有一个父类,它在基本数据类型中包含一个子类的ArrayList,并且它们还需要深度复制

有人能给我指一下正确的方向吗

更新:

我以为它在起作用,但我才意识到它不起作用

这就是我所拥有的

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;
     }
公共类包实现可序列化
{
字符串ID;
字符串服务代码;
字符串名;
字符串类型;
ArrayList服务;
公共包deepClone()
{
尝试
{
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
ObjectOutputStream oos=新的ObjectOutputStream(BAS);
oos.writeObject(本);
ByteArrayInputStream bais=新的ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois=新ObjectInputStream(BAI);
Pack clone=(Pack)ois.readObject();
clone.setID(null);
clone.setType(“副本”);
返回克隆;
} 
捕获(IOE异常)
{
返回null;
}
catch(classnotfounde异常)
{
返回null;
}
}
}
公共类服务实现可序列化
{
字符串ID;
字符串服务代码;
字符串名;
}
现在,在克隆父类a之后,可以得到一个很好的克隆,但是服务数组为空

更新:


对不起,我错了,是因为睡眠不足。它确实在工作。

无论您是否有原始数据类型,序列化都会完成。唯一的条件是您的子类也需要可序列化


请参阅此处的快速教程

只需确保该数组列表的对象也实现了可序列化,即您的子类

“基本数据类型”是指原语吗?嗯,是的,谢谢,让我来解决这个问题。您的理解是错误的,它也适用于深层对象我通过代码或访问者类进行深层复制,永远不要通过序列化。有趣的概念,但不是我在实践中使用的。。这是一个CS课程的想法?不是我。也许我的问题是重复的,我也收到了投票结束线程。很抱歉,我找不到类似的问题。我以为它可以工作,但现在我几乎完成了应用程序,我意识到它不是深度复制。我将添加一些代码以使其更清晰。感谢链接,我将查看它。