从 Java 开始,所有类都继承自 Object 类,因此必须重写克隆方法。然而,这个过程可能很复杂,主要是由于 Object 类的实现可能会引发 CloneNotSupportedException。
同事建议的一种常见方法是在克隆方法中处理异常:
@Override public MyObject clone() { MyObject foo; try { foo = (MyObject) super.clone(); } catch (CloneNotSupportedException e) { throw new Error(); } // Deep clone member fields here return foo; }
这种方法并不是最佳的。正如行业专家 Josh Bloch 所强调的那样,Java 的克隆方法存在根本性缺陷。建议考虑可行的替代方案,例如复制构造函数或复制工厂,而不是依赖克隆。
替代方法:
如果需要克隆:
如果覆盖clone 方法是不可避免的,请确保您的类扩展 Object 并实现 Cloneable。这保证了永远不会抛出 CloneNotSupportedException。不要捕获异常,而是考虑添加一条注释来解释此行为以使其清晰。
或者,您可以实现克隆方法而不调用 super.clone,正如其他 StackOverflow 贡献者所建议的那样。
以上是您是否应该重写 Java `clone()` 方法?如果是,如何重写?的详细内容。更多信息请关注PHP中文网其他相关文章!