使用和不使用Cloneable覆盖克隆

IAm*_*aja 6 java clone object

我读过两者的Javadoc Object,并Cloneable和我只是没有"得到"的东西.有人可以向我解释以下两个例子的性能和/或功能差异:

public class Widget
{
    @Override
    public Widget clone()
    {
            // ... return a clone of this Widget
    }
}
Run Code Online (Sandbox Code Playgroud)

..和:

public class Widget implements Cloneable
{
    @Override
    public Widget clone()
    {
            // ... return a clone of this Widget
    }
}
Run Code Online (Sandbox Code Playgroud)

既然Cloneable没有任何与之相关的方法,并且只允许你访问Object受保护的clone()方法,那么首先实现它是否有意义,看到你将不得不最终写作你自己的(安全)clone()代码吗?提前感谢任何澄清/输入.

Aar*_*ver 5

这是合同义务.

在未实现Cloneable接口的实例上调用Object的clone方法会导致抛出异常CloneNotSupportedException.

虽然可能没有方法可以覆盖,但您仍然在实现您所属的接口.在这样做的过程中,您将接受随后的合同所带来的一切.它会强制您有意识地实现该clone()方法,从而使行为明确.