了解克隆方法

时间:2015-06-24 08:38:59

标签: java clone

我正在阅读J. Bloch的有效Java,现在我正在使用clone方法。他提到没有召唤建造者。但我在javadoc中找不到它。第二件事是:

  

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

这对我来说似乎有些矛盾。虽然他提到没有调用构造函数,但他说行为良好的克隆可以调用构造函数。

你不能解释他的意思吗?

2 个答案:

答案 0 :(得分:3)

有两件事:

  1. 您自己在自己的班级中实施的clone()方法,应遵循一些规则。
  2. 现有Object.clone()方法的实现。
  3. 我相信,当J.布洛赫谈到“没有被称为构造函数”时,他会假设现有Object.clone()方法的行为。但是你引用的引用是关于你自己的clone()方法的实现,在某些情况下,它可以使用构造函数构造新对象,甚至可以返回这样的对象。

答案 1 :(得分:1)

实现Cloneable接口的类可以在没有clone()的情况下从Object类调用CloneNotSupportedException方法。 Object类中clone()的签名告诉您在调用继承的clone时不调用构造函数的原因。它是本机代码,而不是纯Java。

protected native Object clone() throws CloneNotSupportedException;

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