java - 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;
}
}
在第一个构造函数中,注释行是我的版本(根据参数数量调用最终构造函数而不是下一个构造函数)。其他构造函数也可以这样做。它似乎更容易阅读,所以我想一定有一个原因为什么它以另一种(最终)方式完成。
解决方案
推荐阅读
- python - 为自定义 django 模块定义默认应用程序设置的最佳实践?
- bash - 如何从带注释的标签中获取附加提交的哈希
- macos - Charles Proxy SSL 证书在 Mac 上不起作用
- sql - 这个 MERGE / INSERT 查询我做错了什么?
- adobe-pdf-library - 点 H/V 上限为 32768 预缩放
- mysql - MySQL对具有关系的列进行排名
- c++ - 如何声明一个可以通过多个头文件访问的对象?
- automated-tests - 根据文本单击按钮
- web-component - 在 shadowRoot 中执行脚本
- python - 得到以下消息:没有这样的元素:无法找到元素:{“method”:”xpath”,”selector”:”//span[@id='lblError']/text()”}”