我正在阅读J. Bloch的有效Java,现在我正在使用clone
方法。他提到没有召唤建造者。但我在javadoc中找不到它。第二件事是:
规定 “没有被称为构造函数”太强大了。一个表现良好的克隆 方法可以调用构造函数来创建克隆内部的对象 ?正在施工?。如果该类是final,则clone甚至可以返回 由构造函数创建的对象。
这对我来说似乎有些矛盾。虽然他提到没有调用构造函数,但他说行为良好的克隆可以调用构造函数。
你不能解释他的意思吗?
答案 0 :(得分:3)
有两件事:
clone()
方法,应遵循一些规则。Object.clone()
方法的实现。我相信,当J.布洛赫谈到“没有被称为构造函数”时,他会假设现有Object.clone()
方法的行为。但是你引用的引用是关于你自己的clone()
方法的实现,在某些情况下,它可以使用构造函数构造新对象,甚至可以返回这样的对象。
答案 1 :(得分:1)
实现Cloneable
接口的类可以在没有clone()
的情况下从Object类调用CloneNotSupportedException
方法。 Object类中clone()
的签名告诉您在调用继承的clone时不调用构造函数的原因。它是本机代码,而不是纯Java。
protected native Object clone() throws CloneNotSupportedException;
请注意,这只是一个浅拷贝实现。