链式Java深度复制?
我了解如何使用Serializable和Streams进行java深度复制,但前提是要复制的对象只有基本数据类型。在我的例子中,我有一个父类,它在基本数据类型中包含一个子类的ArrayList,并且它们还需要深度复制 有人能给我指一下正确的方向吗 更新: 我以为它在起作用,但我才意识到它不起作用 这就是我所拥有的链式Java深度复制?,java,deep-copy,Java,Deep Copy,我了解如何使用Serializable和Streams进行java深度复制,但前提是要复制的对象只有基本数据类型。在我的例子中,我有一个父类,它在基本数据类型中包含一个子类的ArrayList,并且它们还需要深度复制 有人能给我指一下正确的方向吗 更新: 我以为它在起作用,但我才意识到它不起作用 这就是我所拥有的 public class Pack implements Serializable { String ID; String serviceCode;
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课程的想法?不是我。也许我的问题是重复的,我也收到了投票结束线程。很抱歉,我找不到类似的问题。我以为它可以工作,但现在我几乎完成了应用程序,我意识到它不是深度复制。我将添加一些代码以使其更清晰。感谢链接,我将查看它。