繁体   English   中英

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

[英]Why classes in Java are not cloneable by default

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM