[心得] Effective Java心得筆記

tangchen2016發表於2016-11-11

通讀了Java程式設計思想,發現是個書呆子。還是不會寫程式碼啊。。
所以別光看不練,看千本書不如練熟一本!

學習程式設計藝術,首先要學會基本的規則。
然後才知道什麼時候打破這些規則。

Java支援4種型別:
介面interface
類calss
陣列arrayList
基本型別primitive

前3種型別通常稱為引用型別。
類例項和陣列都是物件,而基本型別的值則不是物件。

簽名不包含它的返回型別。

public static Boolean valueof(Boolean b) {
  return b?Boolean.TRUE:Boolean.False;

靜態工廠方法與構造器相比,優勢:
呼叫可以起有含義的名稱;
不必在每次呼叫時例項化新物件;
它們可以返回原返回型別的任何子型別的物件。

缺點如下:
類如果不含有公有的或受保護的構造器,就不能被子類化。它與其它靜態方法無本質區別。

builder模式不直接呼叫建構函式,而是很巧妙地返回builder物件本身,從而支援級聯式初始化。

package com.test;

/**
 * Created by tangchen on 2016/11/11.
 */
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 carboydrate;

    public static class Builder {
        private final int servingSize;
        private final int servings;

        private int calories = 0;
        private int fat = 0;
        private int carbohydrate = 0;
        private int sodium = 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 carbohydrate(int val) {
            carbohydrate = val;
            return this;
        }

        public Builder sodium(int val) {
            sodium = val;
            return this;
        }

        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }

    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carboydrate = builder.carbohydrate;
    }
}

usage:
//builder的setter方法返回builder本身,以便可以把呼叫連結起來
NutritionFacts cocaColca= new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

未完待續

相關文章