我听说您应该在代码中避免使用它,但是由于某种原因实现了它,所以在某种情况下使用它实际上是一个好选择(还是不错的选择),还是我应该始终尝试避免它?
如果您已经阅读了我书中有关克隆的内容,尤其是您在两行之间阅读的话,您会知道我认为克隆已被严重打破。有一些设计缺陷,其中最大的缺陷是Cloneable接口没有克隆方法。这意味着它根本行不通:制作可克隆内容并不能说明您可以使用它做什么。相反,它说明了其内部功能。它说,如果通过重复调用super.clone最终导致调用Object的clone方法,则此方法将返回原始字段的副本。
但这并没有说明您可以对实现Cloneable接口的对象执行的操作,这意味着您无法执行多态克隆操作。如果我有一个Cloneable数组,那么您会认为我可以将该数组用完并克隆每个元素以制作该数组的深层副本,但是我做不到。您不能将某些内容强制转换为Cloneable并调用clone方法,因为Cloneable没有公共的克隆方法,Object也没有。如果尝试强制转换为Cloneable并调用clone方法,则编译器会说您正在尝试对对象调用受保护的clone方法。
可克隆性被破坏很遗憾,但是它确实发生了。最初的Java API在紧迫的期限内很快就完成了,以迎接一个封闭的市场窗口。最初的Java团队做得非常出色,但是并非所有的API都是完美的。可克隆性是一个薄弱环节,我认为人们应该意识到它的局限性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句