【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器
阿新 • • 發佈:2018-04-10
返回對象 boolean 簡化 將不 其他 種類型 bigint color pre
類可以提供一個靜態方法,返回類的一個靜態實例,如Boolean包裝類的一個獲取實例的靜態方法
1 public static Boolean valueOf(boolean b) { 2 return (b ? TRUE : FALSE); 3 }
優勢:
1、有名稱。當一個類需要多個帶有相同簽名的構造器時,就用靜態工廠方法代替構造器,並慎重選擇名稱以突出它們之間的區別。 如:BigInteger.probablePrime(int bitLength, Random rnd) 返回一個隨機的素數。
2、不必在每次調用它們的時候都創建一個新對象。
3、可以返回其子類,在選擇返回對象的類時有了更大的靈活性。
4、簡化代碼。
缺點:
1、整個類如果沒有public 或 protected類型的構造器,則它將不能被繼承,即不能作為超類,相當於final。
2、與其他靜態方法在api文檔中沒有區別,不像構造器在api中可以標識出來
靜態工廠方法慣用名稱:
- valueOf —— 返回的實例與其參數具有相同的值,實際上是一種類型轉換方法
- of —— valueOf簡潔的替代,EnumSet中有使用
- getInstance
- newInstance ——同getInstance,保證每個返回的實例都與其他實例不同
- getType —— Type表示工廠方法所返回的對象類型
- newType
【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器