我已经阅读了Object
和Cloneable
的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()代码?提前感谢任何澄清/输入。
答案 0 :(得分:5)
在未实现的实例上调用Object的clone方法 Cloneable接口导致异常 抛出CloneNotSupportedException。
虽然可能没有方法可以覆盖,但您仍然在实现您所属的接口。在这样做的过程中,您将接受随后的合同所带来的一切。它强迫您有意识地实现clone()
方法,从而使行为明确。
答案 1 :(得分:0)
a)克隆调用构造对象的超语言方式 - 没有构造函数。
b)克隆要求您以某种方式处理CloneNotSupportedException - 或者打扰客户端代码来处理它。
c)好处很小 - 您不必手动编写复制构造函数。 因此,请巧妙地使用Cloneable。与您需要申请做的事情相比,它没有给您带来足够的好处。