Java中的生成器模式

时间:2014-08-05 02:58:36

标签: java builder

如果我有一个使用构建器模式进行构造的类,因为大多数参数是可选的,如何指定默认值?例如,在下面的情况中,如果客户端仅使用必填项构建但稍后查询可选项,那会发生什么?

  public class BClass {
    private final int compulsoryItem;
    private final int optional1;
    private final String optional2;

    public int getCompulsoryItem() { return compulsoryItem; }
    public int getOptional1() { return optional1; }
    public int getOptional2() { return optional2; }

    private BClass(Builder builder) {
       this.compulsoryItem = builder.compulsoryitem;
       this.optional1 = builder.optional1;
       this.optional2 = builder.optional2;
    }

    public static class Builder {
       private int compulsoryItem;
       private int optional1;
       private String optional2;

       public Builder(int c) { this.compulsoryItem = c; }
       public Builder opt1(int o1) { this.optional1 = o1; return this; }
       public Builder opt2(String o2) { this.optional2 = o2; return this; }

       public BClass build() { return new BClass(this); }
    }


  }

1 个答案:

答案 0 :(得分:1)

只需在Builder类中指定默认值即可。它们不是构建器中的最终版本,因此可以重新分配它们。您不能在实际的BClass中设置默认值,因为所有字段都是最终的。