猿问

如何在Java中对象进行深度复制?

如何在Java中对象进行深度复制?在java中,实现深度对象复制函数有点困难。您采取了哪些步骤来确保原始对象和克隆对象不共享引用?

郎朗坤
浏览 1282回答 3
3回答

哈士奇WWW

一种安全的方法是序列化对象,然后反序列化。这确保了一切都是全新的参考。这是一篇文章关于如何有效地做到这一点。注意:类有可能覆盖序列化,例如新实例不为单身汉而创建的。当然,如果您的类不是可序列化的,这也是不起作用的。

慕莱坞森

有几个人提到使用或重写Object.clone()..别这么做。Object.clone()存在一些主要问题,而且在大多数情况下都不鼓励使用它。请参阅项目11,从“有效Java“约书亚·布洛赫给你一个完整的答案,我相信你可以安全地使用Object.clone()在基本类型数组上,但是除此之外,您还需要正确地使用和重写克隆。依赖序列化(XML或其他方式)的方案是不切实际的。这里没有简单的答案。如果要深入复制对象,则必须遍历对象图,并通过对象的复制构造函数或静态工厂方法显式地复制每个子对象。不变(例如)String不需要复制。顺便说一句,出于这个原因,你应该赞成不变性。

开心每一天1111

您可以使用序列化进行深度复制,而无需创建文件。您希望深入复制的对象将需要implement serializable..如果类不是最终类或无法修改,则扩展类并实现可序列化。将类转换为字节流:ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(object); oos.flush();oos.close();bos.close();byte[] byteData = bos.toByteArray();从字节流还原类:ByteArrayInputStream bais = new ByteArrayInputStream(byteData);(Object) object = (Object) new ObjectInputStream(bais).readObject();
随时随地看视频慕课网APP

相关分类

Java
我要回答