我正在阅读Joshua Bloch的"Effective Java第二版"。我的问题是关于第2条建议"当遇到多个构造器参数时考虑使用构建器(Builder)"
以下是书中的一个简化示例:
public class NutritionFacts {
private final int calories;
public static class Builder {
private int calories = 0;
public Builder(){}
public Builder calories(int val) {
calories = val;
return this;
}
public NutritionFacts build(){
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder){
calories = builder.calories;
}
}
请调用它:NutritionFacts cocaCola = new NutritionFacts.Builder().calories(300).build()
我的版本
public class NutritionFacts {
private int calories;
public NutritionFacts calories(int calories) {
this.calories = calories;
return this;
}
}
调用:NutritionFacts cocaCola = new NutritionFacts().calories(300);
那么这个书中的例子有什么优势呢?我只看到了不可变性,而我的解决方案并不可行。
NutritionFacts.Builder().calories(300).build()
或Builder().calories(300).build()
,其次,如@JonSkeet所说,您的实现不是一个构建器。 - user902383