我应该在java中使用Clone方法吗?

时间:2014-10-26 22:04:39

标签: java copy clone

我听说你应该在你的代码中避免使用它,但它是出于某种原因实现的,所以是否存在使用它实际上是一个好(或不坏)选择的情况,还是应该总是试图避免它?

2 个答案:

答案 0 :(得分:3)

Josh Bloch answered this perfectly:

  

如果您已经阅读了我的书中有关克隆的项目,特别是如果您   在线之间阅读,你会知道我认为克隆是深刻的   破碎。有一些设计缺陷,其中最大的就是   可克隆的接口没有克隆方法。这意味着它   根本不起作用:制作Cloneable不会说什么   关于你可以用它做什么。相反,它说的是什么   它可以在内部完成。它说如果通过调用super.clone   反复它最终调用Object的clone方法,这个方法会   返回原始的字段副本。

     

但它没有说明你可以用一个对象做什么   实现Cloneable接口,这意味着你无法做到   多态克隆操作。如果我有一个Cloneable数组,你   会认为我可以运行该数组并克隆每个元素   制作数组的深层副本,但我不能。你不能施展   克隆的东西,并调用克隆方法,因为克隆   没有公共克隆方法,也没有Object。如果你试试   为了转换为Cloneable并调用clone方法,编译器会说   您正试图在对象上调用受保护的克隆方法。

     

令人遗憾的是Cloneable被破坏了,但它确实发生了。原本的   Java API在紧迫的期限内完成,以满足a   关闭市场窗口。最初的Java团队做了不可思议的工作,   但并非所有的API都是完美的。 Cloneable是一个弱点,我   认为人们应该意识到它的局限性。

答案 1 :(得分:0)

您应该尝试始终根据对象类型覆盖clone方法,但java clone()方法并不总是按照您的意愿执行。

请参阅:Deep copy, shallow copy, clone