我最近开始阅读Joshua Bloch撰写的Effective Java。我发现构建器模式[书中的项目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(); }}我收到以下编译器错误:一个包含有效java.BuilderPattern.NutritionalFacts.Builder的封闭实例。NutritionalFacts n = new NutritionalFacts.Builder(10).carbo(23).fat(1).build();我不明白该消息的含义。请解释。上面的代码类似于Bloch在他的书中建议的示例。
3 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
使构建器成为一个static类。然后它将起作用。如果它是非静态的,则将需要其拥有类的实例-重点是不要拥有它的实例,甚至禁止在没有构建器的情况下创建实例。
public class NutritionFacts {
public static class Builder {
}
}
添加回答
举报
0/150
提交
取消