我最近开始阅读 Joshua Bloch 的《Effective Java》。我发现 Builder 模式 [书中的第 2 项] 的想法非常有趣。我试图在我的项目中实现它,但出现编译错误。以下本质上是我试图做的事情:
具有多个属性的类及其构建器类:
public class NutritionalFacts {
private int sodium;
private int fat;
private int carbo;
public class Builder {
private int sodium;
private int fat;
private int carbo;
public Builder(int s) {
this.sodium = s;
}
public Builder fat(int f) {
this.fat = f;
return this;
}
public Builder carbo(int c) {
this.carbo = c;
return this;
}
public NutritionalFacts build() {
return new NutritionalFacts(this);
}
}
private NutritionalFacts(Builder b) {
this.sodium = b.sodium;
this.fat = b.fat;
this.carbo = b.carbo;
}
}
我尝试使用上述课程的课程:
public class Main {
public static void main(String args[]) {
NutritionalFacts n =
new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
}
}
我收到以下编译器错误:
需要包含 effectivejava.BuilderPattern.NutritionalFacts.Builder 的封闭实例 NutritionalFacts n = new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
我不明白消息的意思。请解释。上面的代码类似于 Bloch 在他的书中建议的示例。
原文由 Swaranga Sarma 发布,翻译遵循 CC BY-SA 4.0 许可协议
使生成器成为
static
类。然后它会起作用。如果它是非静态的,它将需要它所属类的实例——关键是不要拥有它的实例,甚至禁止在没有构建器的情况下创建实例。参考: 嵌套类