首页 > 解决方案 > Java 在继承结构上实现接口 Cloneable

问题描述

我的代码有以下问题:

public class Parent {
    ...
}

public class Child extends Parent implements Cloneable {
    ...
    @Override
    public Child clone() {
        return new Child() //deep copy
    }
}

以下是我的问题:

  1. 遵循java约定;我是否也需要为父母实现 Cloneable ?
  2. 我必须添加throws CloneNotSupportedException到 clone() 方法还是允许我把它放在一边?因为我无法捕捉到我调用克隆()的异常。

谢谢你的帮助。

编辑:我选择了复制构造函数,因为它们更容易实现和动态。

标签: javainheritancecloneableinterface-implementation

解决方案


Cloneable 是遗留的(旧的和奇怪的,应该避免未来的发展)。它不能进行深度复制,而且它的努力不值得实施。您需要使用 Jackson 或 Apache 等第三方库进行深度复制。或者您可以构建自己的深拷贝方法。

如果你已经实现了深拷贝,最好在构造函数上使用它。

public class Child extends Parent {
    public Child(Child child){
        this.property = child.getProperty();
        // any copies
    }
}


推荐阅读