【发布时间】:2012-07-24 03:31:45
【问题描述】:
我阅读了 Effective Java 书籍,但不理解其中解释 Clonable 接口的一段。有人可以解释一下这一段吗:
...程序员假设如果他们扩展一个类并调用
super.clone来自子类,返回的对象将是一个实例 的子类。超类可以提供此功能的唯一方法 功能是返回通过调用super.clone获得的对象。 如果一个克隆方法返回一个由构造函数创建的对象,它将 上错课了。
谢谢。
【问题讨论】:
-
就我而言,你永远不应该使用克隆,你最好使用复制构造函数。至于克隆去这里看:stackoverflow.com/questions/2326758/…
-
@mihaisimi 复制构造函数不允许运行时动态类型克隆。例如,请克隆
List list,你要使用哪个List实现的构造函数,ArrayList,LinkedList? -
Clonable接口是整个 Java 语言中最丑陋和最愚蠢的东西之一。我不知道他们为什么不弃用它。使用起来真的很痛苦,它带来的问题比它解决的问题多得多。有时需要它的功能,但它的实现是一场灾难。 -
@SoboLAN
clone在正确实施时效果很好。问题是大多数人都搞砸了。
标签: java cloneable effective-java