2011-10-14 137 views
6

我已经阅读了javadoc的ObjectCloneable,我只是没有“获取”某些东西。可有人请向我解释的性能和/或功能的不同的两个例子如下:覆盖无克隆的克隆

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()代码?在此先感谢您的澄清/意见。

回答

5

这是一个contractual obligation

调用对象的clone方法上没有实现 在异常 CloneNotSupportedException的Cloneable接口结果的情况下被抛出。

虽然可能没有方法来覆盖,你还在实施一项接口你的一部分。在这样做时,你承担随后合同的所有内容。它迫使你故意实施clone()方法,从而使行为明确。

+0

非常有趣 - 谢谢! – IAmYourFaja

+0

链接不再有效 – marcospgp

0

a)克隆调用异常构造对象的方式 - 没有构造函数。

b)克隆需要您以某种方式对待CloneNotSupportedException - 或者为了处理它而烦扰客户端代码。

c)好处很小 - 您不必手动编写复制构造函数。 因此,使用Cloneable judiosly。与你需要申请的努力相比,它没有给你带来足够的好处。

About Java cloneable