2015-06-24 153 views
0

我正在阅读J. Bloch的有效Java,现在我在clone方法。他提到没有建设者被调用。但我没有在javadoc中找到它。第二件事是:了解克隆方法

“没有构造函数被称为”的规定太强大了。行为良好的克隆方法可以调用构造函数来创建正在构建的克隆 内部的对象。如果这个类是final的,克隆甚至可以返回一个由构造函数创建的 对象。

这似乎与我有点矛盾。当他提到没有构造函数被调用时,他说这个行为良好的克隆可以调用构造函数。

难道你不能解释他的意思吗?

回答

3

有两种不同的东西:

  1. 自己的实现在自己的类clone()方法,应该遵循一些规则。
  2. 执行现有的Object.clone()方法。

我相信,当J.布洛赫谈到“没有构造函数被调用”时,他假设现有的Object.clone()方法的行为。但是你引用的引用是关于你自己实现的clone()方法,它在某些情况下可以使用构造函数构造新的对象,甚至返回这样的对象。

+0

那么需要不调用构造函数呢? –

+0

我检查了JavaSE 5和6的javadocs,并且没有这样的引用。他在哪里找到它? –

+0

@ St.Antario请检查我的答案。 – Juvanis

1

实现Cloneable接口的类可以调用clone()方法从Object类没有CloneNotSupportedException。 Object类中clone()的签名说明为什么在调用继承克隆时不调用构造函数。它是本机代码,不是纯Java。

protected native Object clone() throws CloneNotSupportedException; 

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