如何在java中深度复制对象。该对象可能是也可能不是可序列化的[重复]

Posted

技术标签:

【中文标题】如何在java中深度复制对象。该对象可能是也可能不是可序列化的[重复]【英文标题】:How to deep copy an object in java. The object may or may not be serializable [duplicate] 【发布时间】:2016-04-28 18:14:32 【问题描述】:

我们如何在java中复制一个对象而不复制引用。如果内部存在任何对象,那么我们应该只复制该值而不修改原始对象引用。

如何以一般方式做到这一点。那就是我们不知道对象是否可序列化。

我想编写一个方法来深度复制传递给它的对象。传递给它的对象可以是任何类型。

【问题讨论】:

您最好的选择可能是自己编写一个复制构造函数,然后执行MyClass newObj = new MyClass(oldObj);。其他选项是依赖序列化/反序列化或Object.clone,但请阅读Copy Constructor versus Cloning。 如果对象不可序列化,我们如何做到这一点 您是否在控制实施? (你能修改类的代码吗?)或者你想从库中深拷贝一个对象? 不,我不能修改对象的类。我只是想编写一个通用方法,将作为参数传递的对象复制给它。 恐怕不可能。考虑一下如果您尝试复制的对象包含对单例对象的引用会发生什么。 【参考方案1】:

尝试来自 Apache Commons Lang 的 SerializationUtils.clone()。如果您不想包含整个库,请将该方法复制到您的代码中。该对象必须是可序列化的。

【讨论】:

【参考方案2】:
MyObject object = new MyObject(<parameters of the old object>);

如果你只是使用

object = oldObject;

您将复制参考。

【讨论】:

如果里面有对象引用怎么办。在这种情况下,对象引用将被复制。

以上是关于如何在java中深度复制对象。该对象可能是也可能不是可序列化的[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java对象的深拷贝

在java中,如何复制一个对象?比如说string对象

反射实现java深度克隆

在 Java 中复制对象

python 对象克隆

如何在 Java 中声明对象数组? [复制]