了解克隆方法

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.

我觉得有点矛盾。虽然他提到没有调用构造函数,但他说行为良好的克隆可以调用构造函数。

你不能解释一下他的意思吗?

有两点不同:

  1. 您在自己的 class 中实现了 clone() 方法,应该遵循一些规则。
  2. 现有 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;

请注意,这只是一个浅拷贝实现。