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...