如果我有一个使用构建器模式进行构造的类,因为大多数参数是可选的,如何指定默认值?例如,在下面的情况中,如果客户端仅使用必填项构建但稍后查询可选项,那会发生什么?
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); }
}
}
答案 0 :(得分:1)
只需在Builder类中指定默认值即可。它们不是构建器中的最终版本,因此可以重新分配它们。您不能在实际的BClass中设置默认值,因为所有字段都是最终的。