Java學習筆記 11 謹慎地覆蓋clone

2021-08-26 19:49:17 字數 1191 閱讀 6782

1、clone方法的通用約定是非常弱的

x.clone()!=x

x.clone().getclass()==x.getclass()

x.clone().equals(x)

都不是絕對的要求

2、clone方法就是另乙個構造器,你必須保證它不會傷害到原始的物件,並確保正確地建立被轉殖物件中的約束條件。

3、clone架構與應用可變物件的final域的正常用法是不相容的。

4、深度clone,典型例子hashtable

5、執行緒安全的類實現cloneable介面,clone方法必須實現好同步:hashtable。

public class deepclone } 總結:

(1)預設實現方式

實現了cloneable介面的類都應該有乙個公用的方法覆蓋clone:

@override public phonenumber clone()

此公有方法首先呼叫super.clone(),然後修正任何需要修正的域(淺轉殖、深度轉殖)。

(2)最佳實踐

實現物件的拷貝的好辦法是提供乙個拷貝構造器(copy constructor)或者拷貝工廠(copy factory)

相比cloneable/clone優點:

不依賴於某一種很有風險的,語言之外的物件建立機制;

不要求遵守尚未制定好的文件規範;

不會與final域的正常使用發生衝突;

不會丟擲不必要的受檢查異常clonenotsupportedexception;

不需要強制進行型別轉換;

建議使用最佳實踐

/** * 拷貝構造器(copy constructor)或者拷貝工廠(copy factory)展示 * @author administrator liuyang * dec 23, 2009-12:05:00 am */ public class goodclone /** * 拷貝構造器 * @param good */ public goodclone(goodclone good) /** * 拷貝工廠 * @param good * @return */ public static goodclone newinstance(goodclone good) public static goodclone cloneinstance(goodclone good) public static void main(string arr) }

Java學習筆記 謹慎地覆蓋clone

1 clone方法的通用約定是非常弱的 x.clone x x.clone getclass x.getclass x.clone equals x 都不是絕對的要求 2 clone方法就是另乙個構造器,你必須保證它不會傷害到原始的物件,並確保正確地建立被轉殖物件中的約束條件。3 clone架構與應...

第11條 謹慎地覆蓋clone

cloneable介面表明這樣的物件時允許轉殖的,但這個介面並沒有成功達到這個目的,主要是因為它缺少乙個clone方法,object的clone方法是受保護的。如果不借助反射,就不能僅僅因為乙個物件實現了colneable就可以釣魚clone方法,即使是反射呼叫也不能保證這個物件一定具有可訪問clo...

java學習筆記 11

1 scanner的使用 了解 1 在jdk5以後出現的用於鍵盤錄入資料的類。2 構造方法 a 講解了system.in這個東西。它其實是標準的輸入流,對應於鍵盤錄入 b 構造方法 inputstream is system.in scanner inputstream is c 常用的格式 sca...