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。与你需要付出的努力相比,它并不能给你带来足够的好处