【发布时间】:2012-05-02 06:26:09
【问题描述】:
我正在阅读来自 Effective Java 的有关 clone 的信息
它说在clone 中,第一个被调用的方法必须是super.clone()
在这种情况下,我猜我们最终会调用 clone 的 java.lang.Object 向上层级链。
但我认为该对象的克隆没有任何作用。
查看代码我看到:protected native Object clone() throws CloneNotSupportedException; 并且没有实现。
但从段落看来,如果一个类只有原始字段调用(ClassX) super.clone() 足以创建一个克隆。
但是怎么做? super.clone 属于 Object。
【问题讨论】:
-
书上也应该说使用clone()不是个好主意....你遇到的问题是必须依赖超类正确实现方法,否则你会遇到麻烦。要正确克隆一个对象,您必须复制所有字段(如果文件是原始文件,它们显然是不可变的,因此您可以使用 = 而不是克隆简单地复制引用,就像任何不可变对象一样)。尝试使用复制构造函数或静态工厂方法,而不是使用克隆。好多了。
-
Object#clone被实现为原生方法。见stackoverflow.com/questions/6825982/…
标签: java