如何在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中深度复制对象。该对象可能是也可能不是可序列化的[重复]的主要内容,如果未能解决你的问题,请参考以下文章