1

可能重复:
Java:推荐的深度克隆/复制实例的解决方案

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

4

6 回答 6

7

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

  • Java 有该clone协议,但现在大多数情况下它被认为已弃用;
  • 您可以使用序列化在内存中序列化反序列化;
  • 您可以编写所谓的复制构造函数。
于 2012-06-25T10:50:30.977 回答
3

Java 深度克隆库 克隆库是一个小型的开源 Java 库,用于深度克隆对象。对象不必实现 Cloneable 接口。实际上,这个库可以克隆任何 java 对象。

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

所以这里是示例克隆

于 2012-06-25T10:51:23.820 回答
2

您需要clone() 像这样覆盖方法

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

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

 }

另见

于 2012-06-25T10:49:52.163 回答
0

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

public MyClass(MyClass instanceToCopy)
{
   ...
}
于 2012-06-25T10:53:19.327 回答
0

实现深拷贝的最简单方法是序列化然后反序列化对象。向上看ObjectInputStreamObjectOutputStream

于 2012-06-25T10:50:49.343 回答
0

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

于 2012-06-25T10:51:13.953 回答