1. 程式人生 > >不可變對象

不可變對象

etl copy 修飾符 bsp 不可變對象 public style car his

不可變對象在多線程的情形下是線程安全的。構建規則可參照如下代碼中註釋。

//類添加final修飾符,保證類不被繼承
public final class ImmutableNutritionFacts {
    //所有成員變量必須私有,並且加上final修飾
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final
int carbohydrate; private final List<String> list; //通過構造器初始化所有成員,進行深拷貝(deep copy) public ImmutableNutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate, List<String> list){ this.servingSize = servingSize;
this.servings = servings; this.calories = calories; this.fat = fat; this.sodium = sodium; this.carbohydrate = carbohydrate; this.list = list.subList(0, list.size()); //deep copy(引用類型) } //不提供改變成員變量的方法,包括setter //在getter方法中,不要直接返回對象本身,而是克隆對象,並返回對象的拷貝 public
int getServingSize() { return servingSize; } public int getServings() { return servings; } public int getCalories() { return calories; } public int getFat() { return fat; } public int getSodium() { return sodium; } public int getCarbohydrate() { return carbohydrate; } public List<String> getList() { return list.subList(0, list.size()); //返回對象的拷貝 } }

不可變對象