为了账号安全,请及时绑定邮箱和手机立即绑定

克隆()vs复制构造函数-这是java中推荐的构造函数。

克隆()vs复制构造函数-这是java中推荐的构造函数。

繁星coding 2019-07-13 09:32:00
在java中克隆方法与复制构造函数。哪一个是正确的解决方案。每个案例在哪里使用?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

记住clone()不是从盒子里出来的。你必须实现Cloneable并覆盖clone()方法制作public.

有几种选择比较可取(因为clone()方法存在许多设计问题,如其他答案所述),复制构造函数需要手工操作:


查看完整回答
反对 回复 2019-07-13
?
慕慕森

TA贡献1856条经验 获得超17个赞

克隆()的设计有几个错误(参见这个问题),所以最好避免它。

从…有效Java第二版,第11项:明智地覆盖克隆

考虑到与cloneable相关的所有问题,可以肯定地说,其他接口不应该扩展它,为继承而设计的类(项目17)不应该实现它。由于它的许多缺点,一些专业的程序员只是选择永远不覆盖克隆方法,从来不调用它,也许,除了复制数组。如果为继承设计类,请注意,如果选择不提供行为良好的受保护的克隆方法,子类不可能实现cloneable。

本书还描述了复制构造器相对于克隆/克隆具有的许多优点。

  • 他们不依赖于一种易受风险的语言外对象创建机制。
  • 它们并不要求对文件很少的公约进行强制执行。
  • 它们与最终字段的正确使用没有冲突
  • 它们不会抛出不必要的检查异常
  • 他们不需要石膏。

所有标准集合都有副本构造函数。用它们。

List<Double> original = // some 
listList<Double> copy = new ArrayList<Double>(original);


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信