一尘不染

为什么人们如此害怕使用clone()(在collection和JDK类上)?

java

我曾多次争论使用clone()并不是一种不好的做法。是的,我知道争论。布洛赫说这很糟糕。他确实做到了,但是他说实施clone()是不好的。另一方面,使用克隆,尤其是如果由受信任的库(例如JDK)正确实现了克隆,则可以。

就在昨天,我讨论了我的一个答案,该讨论仅表明使用clone()for
ArrayList是可以的(我猜没有基于这个原因的支持)。

如果查看@authorArrayList,我们会看到一个熟悉的名字-Josh
Bloch。因此,clone()ArrayList(和其他收藏品)是完全正常的(看看他们的实现)。

同去的Calendar,也许是最的java.langjava.util类。

那么,给我一个 为什么不 clone()与JDK类 一起使用 的理由?


阅读 164

收藏
2020-09-08

共1个答案

一尘不染

那么,给我一个为什么不对JDK类使用clone()的理由?

  • 给定一个ArrayList引用,您需要getClass检查一下它是否不是JDK类的子类。然后什么?潜在的子类不能被信任。大概子类将以某种方式具有不同的行为。
  • 它要求引用比更加具体List。有人不介意,但是大多数人认为那是个坏主意。
  • 您将不得不处理一个强制转换,这是不安全的。
2020-09-08