1. 程式人生 > >【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器

【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器

返回對象 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讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器