のようなロンボク注釈付きクラスがあるとしましょう
@Builder
class Band {
String name;
String type;
}
私ができることを知っています:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
既存のオブジェクトをテンプレートとして使用し、そのプロパティの1つを変更するFooのオブジェクトを簡単に作成する方法はありますか?
何かのようなもの:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
これはロンボクのドキュメントにはありません。
toBuilder
パラメーターを使用して、インスタンスにtoBuilder()
メソッドを与えることができます。
@Builder(toBuilder=true)
class Foo {
int x;
...
}
Foo f0 = Foo.builder().build();
Foo f1 = f0.toBuilder().x(42).build();
ドキュメント から:
@Builderを使用してビルダーを生成して独自のクラスのインスタンスを生成する場合(独自の型を返さないメソッドに@Builderを追加しない限り、これは常に当てはまります)、@ Builder(toBuilder = true)を使用して生成することもできますクラス内のtoBuilder()というインスタンスメソッド。このインスタンスのすべての値で始まる新しいビルダーを作成します。
免責事項:私はロンボク島の開発者です。
既存のオブジェクトをテンプレートとして使用し、そのプロパティのoneを変更するFooのオブジェクトを作成する簡単な方法はありますか? (エンファシス鉱山)
単一のプロパティを本当に変更したい場合は、より優れた効率的な方法があります。
@Wither
class Band {
String name;
String type;
}
Band nirvana = rollingStones.withName("Nirvana");
ウィザーはゴミを作成しませんが、1つのフィールドのみを変更できます。多くのフィールドを変更するには、使用できます
withA(a).withB(b).withC(c)....
大量のゴミ(すべて中間結果)を生成しますが、toBuilder
よりも効率的で自然です。