Java 覆盖可克隆和不可克隆的克隆

Java 覆盖可克隆和不可克隆的克隆,java,object,clone,Java,Object,Clone,我已经阅读了关于对象和可克隆性的javadoc,只是没有“得到”什么。请有人向我解释以下两个示例的性能和/或功能差异: public class Widget { @Override public Widget clone() { // ... return a clone of this Widget } } …和: public class Widget implements Cloneable { @Override

我已经阅读了关于
对象
可克隆性
的javadoc,只是没有“得到”什么。请有人向我解释以下两个示例的性能和/或功能差异:

public class Widget
{
    @Override
    public Widget clone()
    {
            // ... return a clone of this Widget
    }
}
…和:

public class Widget implements Cloneable
{
    @Override
    public Widget clone()
    {
            // ... return a clone of this Widget
    }
}
既然
Cloneable
没有任何绑定的方法,只允许您访问
Object
的受保护的clone()方法,那么,考虑到您将不得不以任何方式编写自己的(安全的)clone()代码,甚至在一开始就实现它有意义吗?提前感谢您的任何澄清/意见。

这是一个很好的回答

在未实现的实例上调用对象的克隆方法 可克隆接口导致异常 正在抛出CloneNotSupportedException

虽然可能没有可重写的方法,但您仍在实现您所属的接口。在这样做的过程中,你将承担其后续合同所带来的一切。它迫使您在知情的情况下实现
clone()
方法,从而使行为显式化。

a)克隆调用构造对象的非语言方式,而不使用构造函数

b) 克隆需要您以某种方式使用CloneNotSupportedException进行处理,或者麻烦客户机代码处理它

c) 好处很小-您不必手动编写复制构造函数。 所以,明智地使用Cloneable。与你需要付出的努力相比,它并不能给你带来足够的好处