【发布时间】:2010-11-09 12:25:28
【问题描述】:
我在 Java 中实现 clone() 时快速搜索了一下,发现: http://www.javapractices.com/topic/TopicAction.do?Id=71
它有以下评论:
复制构造函数和静态工厂方法提供了克隆的替代方法,并且更容易实现。
我只想做一个深拷贝。实现 clone() 似乎很有意义,但是这篇 google 排名很高的文章让我有点害怕。
以下是我注意到的问题:
复制构造函数不适用于泛型。
这是一些无法编译的伪代码。
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
示例 1:在泛型类中使用复制构造函数。
工厂方法没有标准名称。
有一个可重用代码的接口真是太好了。
public class MyClass<T>{
..
public void copyData(T data){
T copy=data.clone();//Throws an exception if the input was not cloneable
}
..
}
示例 2:在泛型类中使用 clone()。
我注意到 clone 不是一个静态方法,但是是否仍然需要对所有受保护的字段进行深拷贝?在实现 clone() 时,在不可克隆子类中引发异常的额外工作对我来说似乎微不足道。
我错过了什么吗?任何见解将不胜感激。
【问题讨论】: