我正在阅读clone
的{{1}}
它说在Effective Java
中,要调用的第一种方法必须是clone
在这种情况下,我想最终我们最终会调用super.clone()
的{{1}}进入层次结构链。
但我认为对象的克隆没有做任何事情
查看代码我看到:
clone
并且没有实施
但是从段落看来,如果一个类只有原始字段调用
java.lang.Object
足以创建克隆
但是怎么样? protected native Object clone() throws CloneNotSupportedException;
属于(ClassX) super.clone()
。
答案 0 :(得分:3)
对象
中的此声明 protected native Object clone() throws CloneNotSupportedException;
...表示clone
方法是在本机代码中实现的;即幕后幕后还有魔力。
您可以放心,Object.clone()
实际上确实做了某些事情......前提是您已宣布您的班级正在实施Cloneable
。但它的作用不能用普通的Java表达。
答案 1 :(得分:2)
clone()是Java中用于对象复制的方法。在Java中,对象通过引用变量进行操作,并且没有用于复制对象的运算符 - 赋值运算符复制引用,而不是对象。 clone()方法提供了这个缺少的功能。
答案 2 :(得分:1)
这是正确的,当你克隆一个对象时,你应该总是调用super.clone()
(作为第一个语句),然后手工克隆你的对象的其余部分,这是因为当你克隆一个对象时你必须确保对象的超类部分也以正确的方式克隆...
如果一个对象不支持clone它会抛出CloneNotSupportedException
,这意味着如果你尝试克隆一个超级对象并且你得到了异常,那么你也不能在你的子类型中实现克隆对象,对象无法克隆...当禁止对象克隆操作正确时,有几种情况。