Effective Java第11条:谨慎地覆盖clone
,仔细阅读后,我们可以更进一步得出结论:其他接口不要继承(extends
扩展)Cloneable
接口,其他类不要实现(implements
)该接口。如果真的需要对象深度(内存)拷贝,可以考虑使用序列化和反序列化代替实现。
对于clone
方法,它本身是浅拷贝,如果拷贝的类持有其他类变量,必须让这个类变量的定义类实现Copy Constructor
。
另一个实现对象拷贝的好办法就是提供一个拷贝构造器(copy constructor
)或者拷贝工厂(copy factory
)。拷贝构造器只是一个构造器,它唯一的参数类型是包含该构造器的类,例如:
public Yum(Yum yum)
拷贝工厂是类似于拷贝构造器的静态工厂:
public static Yum newInstance(Yum yum)
拷贝构造器的做法,及其静态工厂方法的变形,都比Cloneable/clone
方法具有更多的优势,它们不依赖于某一种