2015-06-24 70 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; 

並注意,這只是一個淺拷貝實現。