【发布时间】:2012-06-26 14:53:58
【问题描述】:
可能重复:
Java: recommended solution for deep cloning/copying an instance
我有一个必须克隆的对象。但是,在克隆时,它还应该克隆其中的对象。这怎么可能??
【问题讨论】:
标签: java
可能重复:
Java: recommended solution for deep cloning/copying an instance
我有一个必须克隆的对象。但是,在克隆时,它还应该克隆其中的对象。这怎么可能??
【问题讨论】:
标签: java
您需要像这样覆盖clone() 方法
public class Person implements Cloneable{
private Long id;
private Address address
@Override
protected Object clone() throws CloneNotSupportedException {
//do deep cloning
}
}
另见
【讨论】:
clone 的所有陷阱和陷阱的页面 :) 例如,永远不要使用 new 创建克隆,而是使用 super.clone。
clone 机制本身既不深也不浅。这取决于你如何实现它。
另一种克隆方式是提供复制构造函数,根据提供的实例的数据构造一个新的实例:
public MyClass(MyClass instanceToCopy)
{
...
}
【讨论】:
Java 深度克隆库 克隆库是一个小型的开源库 深度克隆对象的java库。对象 不必实现 Cloneable 接口。实际上,这 库可以克隆任何 java 对象。
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
所以这里是示例cloning。
【讨论】:
最简单的深度克隆方法是使用Java serialization,其中serialize 和deserialize 对象并返回反序列化版本。
【讨论】:
Serializable。
实现深拷贝的最简单方法是序列化然后反序列化对象。查找ObjectInputStream 和ObjectOutputStream。
【讨论】:
您必须意识到,这不是一个明确定义的问题,深度复制无法以机械化、全自动的方式正确完成。以下是一些选项:
clone 协议,但现在大多数情况下它已被弃用;【讨论】: