[英]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.