public class Foo { private final int a, b, c; public static class Builder { //必須 private final int a; //オプション private int b = 0; private int c = 0; public Builder(int a) { this.a = a; } public Builder putB(int b) { this.b = b; return this; } public Builder putC(int c) { this.c = c; return this; } pubcli Foo build() { return new Foo(this); } } private Foo(Builder builder) { this.a = builder.a; this