【发布时间】:2014-12-22 02:20:45
【问题描述】:
我听说你应该在你的代码中避免它,但它是出于某种原因实现的,所以在某些情况下使用它实际上是一个好的(或不错的)选择,还是我应该总是尽量避免它?
【问题讨论】:
-
我不会说你应该避免它。像几乎所有东西一样,您可以正确或错误地使用它...阅读有关原型模式的内容,这就是您可以正确使用它的方法...
-
如果不确定,请自行实施,或者如果可能,最好查看源代码。使用 clone() 的主要问题是你不能总是知道它是否按预期工作(当然,除非你测试它)。例如,我很难获得一个 int 数组的克隆。然而,克隆的文档声明它应该返回对象的副本,所以我也在等待这个答案!
-
我已经 17 年没用过它了,或者“复制构造函数”。
-
@EJP,您以前从未使用过新的 ArrayList(list) 复制构造函数吗?还是它的许多变体之一?
-
@EJP 我不知道为什么当
ArrayList(Collection<? extends E> c)执行与ArrayList(ArrayList<? extends E> list)完全相同的操作时,你不认为它是一个复制构造函数。如果它长得像鸭子,叫起来像鸭子,那它很可能是鸭子……