对象克隆

克隆可能很棘手,尤其是当对象的字段包含其他对象时。在某些情况下,你需要执行深层复制 ,而不是仅复制字段值(即对其他对象的引用)。

底线是克隆被破坏 ,你应该在实现 Cloneable 接口和覆盖 clone 方法之前三思而后行。clone 方法在 Object 类中声明,而不是在 Cloneable 接口中声明,因此 Cloneable 无法用作接口,因为它缺少公共 clone 方法。结果是使用 clone 的合同记录很少并且执行不力。例如,覆盖 clone 的类有时依赖于其所有父类也会覆盖 clone。他们没有强制执行此操作,如果他们不这样做,你的代码可能会抛出异常。

提供克隆功能的更好解决方案是提供复制构造函数复制工厂。请参阅 Joshua Bloch 的有效 Java 项目 11:明智地覆盖克隆。