Cloneable 接口:
- 实现 Cloneable 接口的类表明 clone 方法会返回该对象的一个逐域拷贝(field-for-field copy)的实例。
- 在一个未实现 Cloneable 接口的类上调用 clone 方法会抛出 CloneNotSupportedException 异常。
- 实现 Cloneable 接口的类应该用一个public方法重写 Object 的 clone 方法(protected)。
- Cloneable 接口并没有提供一个 clone 方法,因此并不能因为类实现了此接口就可以调用 clone 方法。
clone 方法的通用约定:
- x.clone() != x 为 true。
- x.clone().getClass() = x.getClass() 为 true。
- x.clone().equals(x) 为 true。
- 拷贝过程中没有调用构造方法。
clone 方法相当于一个构造方法,不能因为调用 clone 方法而对原始对象造成影响。
- 如果原始对象中仅包含原始类型,那么 clone 能得到一个功能完整的对象。
- 如果原始对象中包含一些可变对象,那么必须对这些对象循环调用 clone 方法,保证克隆对象没有引用原始对象中的数据。
- clone 方法和可变对象的 final 域的正常方法是不兼容的。
- 在线程安全的类实现 Cloneable 接口,必须保证 clone 方法也是线程安全的。