为什么Java中的类默认不可复制

时间:2012-12-02 15:46:13

标签: java cloning

在Java中,要使类可克隆,我们需要实现Cloneable接口。 实现这个接口,就是说这个类支持克隆。

但Java语言设计者的动机是什么,因为不将“允许克隆”作为每个类的默认功能?

我们已经存在浅拷贝的默认实现。那为什么这个限制?

4 个答案:

答案 0 :(得分:5)

考虑使用嵌套属性克隆对象。你想要去递归多深?这对于记忆来说可能很难,所以开发者留给我们来决定。

答案 1 :(得分:4)

这是一个让Java知道实现类有意设计用于克隆的标记接口(与其他标记接口类似)。如果您进一步阅读,请在下面找到:

  

按照惯例,实现此接口的类应该使用公共方法覆盖Object.clone (受保护)。有关重写此方法的详细信息,请参阅Object.clone()。

您需要提供自定义克隆方法。通过使用接口Cloneable,Java意识到您有意支持克隆对象。通过提供自定义clone方法,您可以超越对象的默认clone方法。

这样,您可以灵活地决定(标记),哪些对象可以克隆,哪些不可以克隆。如果可以克隆,那么可以达到什么级别(在对象图案例中非常有用)。

答案 2 :(得分:0)

许多原因阻碍了,主要的原因是克隆不是一般情况下可解决的问题,就像序列化一样。

默认情况下,您获得的浅拷贝会在很多情况下破坏对象的不变量,因此它作为一般的默认克隆机制不在图片之外。

答案 3 :(得分:0)

“Cloneable”界面是名为“Marker Class”的设计模式的一部分。基本上,在clone方法中会有一些类型为“Cloneable”的引用。实现可克隆接口时,这意味着您的类可以作为“Cloneable”类型引用。

实际上,另一个原因是您重写了“clone()”方法,并以您自己的特定方式进行克隆。这意味着您认为重要的数据存在于新类中。