2 回答

TA貢獻1824條經(jīng)驗 獲得超8個贊
是否有任何東西阻止 Java 創(chuàng)建隱式復制構造函數(shù),它會在所有成員上調(diào)用復制構造函數(shù)?
主要是這顯然不是它應該做的事情。
在這種情況下,也許你想要一個深拷貝;在這種情況下,也許你想要一個淺拷貝;也許您根本不希望在另一種情況下復制實例;也許您希望以這些方式混合復制特定類的字段。
此外,添加此構造函數(shù)是另一種方法:在方法數(shù)量很重要的環(huán)境中(例如 Android 的 64k Dex 限制),您為不需要的東西付費。
如果需要,最好通過明確的方式讓您這樣做。
但是是什么阻止了Java 擁有這個呢?
鑒于您可以手動定義復制構造函數(shù),自動添加它們在技術上顯然是可行的。
我建議你不能這樣做的一個原因是沒有語言機制可以“刪除”你不想被復制的類的構造函數(shù)。
很容易表明您不想要默認 ctor:只需使用任何簽名定義您自己的 ctor。但是你不能對默認的復制 ctor 做同樣的事情:根據(jù)定義,復制 ctor 只會有簽名YourClass(YourClass instance)
;所以你不能要求,比如說,你定義一個拋出的顯式復制ctor,因為你已經(jīng)將編譯時錯誤(不存在這樣的ctor)更改為運行時錯誤(它存在,但拋出)。
因此,您必須開始發(fā)明額外的機制來刪除構造函數(shù)——比如說,一個特殊的注釋。但這需要更改工具來支持它。
從絕對意義上說,這并非不可能——但需要大量工作來更改語言以添加可以在現(xiàn)有語言中實現(xiàn)的功能。

TA貢獻1836條經(jīng)驗 獲得超4個贊
但確實如此。它是在類中調(diào)用clone()
并實現(xiàn)的方法Object
。
所以你想要做的,可以通過以下方式實現(xiàn):
MyClass obj = new MyClass(); MyClass copy = (MyClass) obj.clone();
添加回答
舉報