constructor使わずbuilderでinstance生成する
builderにItemと同じフィールドを持たせる
builderに値設定するロジックをconsumerとして引き渡す
builder内部でconsumer実行
builder内容でItemを生成するコンストラクタ実行
class Item {
private int price;
private String name;
public Item() {}
private Item(Builder build) {
this.price = build.price;
this.name = build.name;
}
public String toString() {
return "name:" + name + " price:" + price;
}
static class Builder {
int price;
String name;
Builder method(Consumer<Builder> c) {
c.accept(this);
return this;
}
Item build() {
return new Item(this);
}
}
}
public class Outer {
public static void main(String[] args) {
Item i = new Item.Builder().method(b -> {b.name = "suzuki"; b.price = 90;}).build();
System.out.println(i);
}
}
name:suzuki price:90