在Java中,要使类可克隆,我们需要实现Cloneable
接口。
实现这个接口,就是说这个类支持克隆。
但Java语言设计者的动机是什么,因为不将“允许克隆”作为每个类的默认功能?
我们已经存在浅拷贝的默认实现。那为什么这个限制?
答案 0 :(得分:5)
考虑使用嵌套属性克隆对象。你想要去递归多深?这对于记忆来说可能很难,所以开发者留给我们来决定。
答案 1 :(得分:4)
这是一个让Java知道实现类有意设计用于克隆的标记接口(与其他标记接口类似)。如果您进一步阅读,请在下面找到:
按照惯例,实现此接口的类应该使用公共方法覆盖Object.clone (受保护)。有关重写此方法的详细信息,请参阅Object.clone()。
您需要提供自定义克隆方法。通过使用接口Cloneable
,Java意识到您有意支持克隆对象。通过提供自定义clone
方法,您可以超越对象的默认clone
方法。
这样,您可以灵活地决定(标记),哪些对象可以克隆,哪些不可以克隆。如果可以克隆,那么可以达到什么级别(在对象图案例中非常有用)。
答案 2 :(得分:0)
许多原因阻碍了,主要的原因是克隆不是一般情况下可解决的问题,就像序列化一样。
默认情况下,您获得的浅拷贝会在很多情况下破坏对象的不变量,因此它作为一般的默认克隆机制不在图片之外。
答案 3 :(得分:0)
“Cloneable”界面是名为“Marker Class”的设计模式的一部分。基本上,在clone方法中会有一些类型为“Cloneable”的引用。实现可克隆接口时,这意味着您的类可以作为“Cloneable”类型引用。
实际上,另一个原因是您重写了“clone()”方法,并以您自己的特定方式进行克隆。这意味着您认为重要的数据存在于新类中。