effective java的一點學習

許多人力推的一本書,真正看了有種相見恨晚的感覺。書中描述了很多平時沒有注意到的細節和實現方式

1.考慮用靜態工廠代替構造器

優勢在于:
1.它們有名稱
2.不必在每次調用它們的時候都創建一個新的對象
3.它們可以返回原返回類型的任何子類型的對象
4.在創建參數化類型的實例的時候,它們使代碼變得更加簡潔

缺點在于:
1.類如果不含公有的或者受保護的構造器,就不能被子類化
2.它們與其他的靜態方法實際沒有任何區別

慣用名稱:

valueOf
of
getInstance
newInstance
getType
newType

2.遇到多個構造器參數時要考慮構建器

package test;

public class NutritionFacts {

    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    
    public static class Builder {
        private final int servingSize;
        private final int servings;
        
        private int calories = 0;
        private int fat = 0;
        private int sodium = 0;
        private int carbohydrate = 0;
        
        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }
        
        public Builder calories(int val) {
            calories = val; return this;
        }
        public Builder fat(int val) {
            fat = val; return this;
        }
        public Builder sodium(int val) {
            sodium = val; return this;
        }
        public Builder carbohydrate(int val) {
            carbohydrate = val; return this;
        }
        
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
        
    }
    
    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        fat = builder.fat;
        calories = builder.calories;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
        
    }
    
    
    
}

如果類的構造器或者靜態工廠具有多個參數,設計這種類,Builder模式是不錯的選擇

3.使用私有構造器或者枚舉類型強化Singleton屬性

public enum Singleton {
      INSTANCE;
}

單元素的枚舉類型已經成為實現Singleton的最佳方式

4.通過私有構造器強化不可實例化的能力

java.lang.Math或者java.util.Arrays

5.避免創造不必要的對象

構造器在每次調用的時候都會創建一個新的對象,靜態工廠從來不要求這么做

6.消除過期的對象引用

1.只要類自己管理內存,就應該警惕內存泄漏問題
2.緩存
3.監聽器和其他回調

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容