首页 > 解决方案 > Java中的伸缩构造函数-为什么以累积的方式调用构造函数而不是总是调用相同的“最终”构造函数?

问题描述

在 Effective Java, Item 2 中,Joshua Bloch 建议使用 Builder DP 来反对伸缩构造函数。我不明白为什么伸缩构造函数必须调用每个构造函数,而不是使用参数默认值的最后一个构造函数。考虑他的例子:

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 NutritionFacts(int servingSize, int servings) {
        this(servingSize, servings, 0);
        //this(servingSize, servings, 0,0,0,0);
    }

    public NutritionFacts(int servingSize, int servings, int calories) {
        this(servingSize, servings, calories,0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat) {
        this(servingSize, servings, calories,fat, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
        this(servingSize, servings, calories,fat, sodium, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium,int carbohydrate){
        this.servingSize = servingSize;
        this.servings = servings;
        this.fat = fat;
        this.calories = calories;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }
}

在第一个构造函数中,注释行是我的版本(根据参数数量调用最终构造函数而不是下一个构造函数)。其他构造函数也可以这样做。它似乎更容易阅读,所以我想一定有一个原因为什么它以另一种(最终)方式完成。

标签: javaconstructor

解决方案


推荐阅读