深度克隆java中的对象

时间:2012-06-25 10:47:12

标签: java

  

可能重复:
  Java: recommended solution for deep cloning/copying an instance

我有一个必须克隆的对象。但是,克隆它时也应克隆其中的对象。这怎么可能?

6 个答案:

答案 0 :(得分:6)

您必须意识到这不是一个明确定义的问题,深度复制无法以机械化,全自动的方式正确完成。以下是一些选项:

  • Java具有clone协议,但现在大多数情况下都被认为已弃用;
  • 您可以使用序列化来序列化 - 反序列化内存;
  • 你可以写所谓的复制构造函数。

答案 1 :(得分:2)

您需要覆盖clone()方法

public class Person implements Cloneable{
 private Long id;
 private Address address

  @Override
  protected Object clone() throws CloneNotSupportedException {
  //do deep cloning
  }

 }

另见

答案 2 :(得分:2)

  

Java深度克隆库克隆库是一个小型的开源   深入克隆对象的java库。对象   不必实现Cloneable接口。这是有效的   库可以克隆任何java对象。

Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);

所以这里是示例cloning

答案 3 :(得分:0)

实现深层复制的最简单方法是序列化然后反序列化对象。查看ObjectInputStreamObjectOutputStream

答案 4 :(得分:0)

深度克隆的最简单方法是使用Java serialization,您serializedeserialize对象并返回反序列化版本。

答案 5 :(得分:0)

另一种克隆方法是提供复制构造函数,以根据提供的实例的数据构建新实例:

public MyClass(MyClass instanceToCopy)
{
   ...
}