在Java中深度克隆对象

Deep clone an object in java

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Java: recommended solution for deep cloning/copying an instance

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


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

  • Java具有clone协议,但是如今在大多数情况下它都已被弃用。
  • 您可以使用序列化对内存中的序列进行反序列化;
  • 您可以编写所谓的复制构造函数。

Java Deep-Cloning library The cloning library is a small, open source
java library which deep-clones objects. The objects
don't have to implement the Cloneable interface. Effectivelly, this
library can clone ANY java objects.

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

因此,这里是克隆示例。


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

1
2
3
4
5
6
7
8
9
10
public class Person implements Cloneable{
 private Long id;
 private Address address

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

 }

另请参阅

  • 使用复制构造函数而不是Object.clone进行深度复制的正确方法


克隆的另一种方法是提供一个副本构造函数,以根据所提供实例的数据构造一个新实例:

1
2
3
4
public MyClass(MyClass instanceToCopy)
{
   ...
}

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


实现深层副本的最简单方法是先序列化然后反序列化对象。查找ObjectInputStreamObjectOutputStream