了解克隆方法
Understanding clone method
我正在阅读 J. Bloch 的有效 Java,现在我正在使用 clone
方法。他提到没有调用构造函数。但是我没有在javadoc中找到它。第二件事是:
The provision that
“no constructors are called” is too strong. A well-behaved clone
method can call constructors to create objects internal to the clone
under construction. If the class is final, clone can even return an
object created by a constructor.
我觉得有点矛盾。虽然他提到没有调用构造函数,但他说行为良好的克隆可以调用构造函数。
你不能解释一下他的意思吗?
有两点不同:
- 您在自己的 class 中实现了
clone()
方法,应该遵循一些规则。
- 现有
Object.clone()
方法的实现。
我相信,当 J. Bloch 谈到 "no constructors were called" 时,他假设了现有 Object.clone()
方法的行为。但是你引用的引文是关于你自己实现的 clone()
方法,在某些情况下可以使用构造函数甚至 return 这样的对象构造新对象。
类 实现 Cloneable
接口可以从对象 class 调用 clone()
方法而无需 CloneNotSupportedException
。 Object class 中 clone()
的签名说明了为什么调用继承的克隆时不调用构造函数。它是本机代码,不是纯 Java.
protected native Object clone() throws CloneNotSupportedException;
请注意,这只是一个浅拷贝实现。
我正在阅读 J. Bloch 的有效 Java,现在我正在使用 clone
方法。他提到没有调用构造函数。但是我没有在javadoc中找到它。第二件事是:
The provision that “no constructors are called” is too strong. A well-behaved clone method can call constructors to create objects internal to the clone under construction. If the class is final, clone can even return an object created by a constructor.
我觉得有点矛盾。虽然他提到没有调用构造函数,但他说行为良好的克隆可以调用构造函数。
你不能解释一下他的意思吗?
有两点不同:
- 您在自己的 class 中实现了
clone()
方法,应该遵循一些规则。 - 现有
Object.clone()
方法的实现。
我相信,当 J. Bloch 谈到 "no constructors were called" 时,他假设了现有 Object.clone()
方法的行为。但是你引用的引文是关于你自己实现的 clone()
方法,在某些情况下可以使用构造函数甚至 return 这样的对象构造新对象。
类 实现 Cloneable
接口可以从对象 class 调用 clone()
方法而无需 CloneNotSupportedException
。 Object class 中 clone()
的签名说明了为什么调用继承的克隆时不调用构造函数。它是本机代码,不是纯 Java.
protected native Object clone() throws CloneNotSupportedException;
请注意,这只是一个浅拷贝实现。