EffectiveJava之10-謹慎改寫clone

    1、實際上,clone 方法是另一個構造函數;你必須確保它不會傷害到原始的對象,並且能正確的建立起被克隆對象中的約束關係。

       2、clone結構域指向可變對象的final域的正常用法不兼容。

       3、若對一個散列表編寫clone(),其內部數據是散列桶數組組成,呢個散列桶都指向“K--V”。雖然被克隆的對象有它自己的散列桶數組,但,這個數組引用的列表與原始對象是一樣的,從而引起克隆與原始對象間的不確定行爲。

       爲修正,則需要爲每一個組成桶的鏈表單獨拷貝,常用做法是深度拷貝(deepcopy)

      如果鏈表較長,則在deep copy中用迭代代替遞歸(recursion);

      4、** 實現對象拷貝的另一個較好方法是:提供一個拷貝構造函數(也是一個構造函數,其唯一的參數類型是包含該構造函數的類);

      其變形就是 靜態工廠方法(帶一個參數,類型爲該類實現的一個適當接口)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章