为了账号安全,请及时绑定邮箱和手机立即绑定

有效Java中的构建器模式

有效Java中的构建器模式

达令说 2019-10-16 11:16:11
我最近开始阅读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 {

    }

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 610 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信