Javaプロトコルバッファオブジェクトのツリーの奥深くに、小さな変更を加えたいと思います。
.getBuilder()
メソッドを使用して、いくつかの変更を加えた古いオブジェクトのクローンである新しいオブジェクトを作成できます。
これが深いレベルで行われると、コードは醜くなります。
Quux.Builder quuxBuilder = foo.getBar().getBaz().getQuux().toBuilder()
Baz.Builder bazBuilder = foo.getBar().getBaz().toBuilder()
Bar.Builder barBuilder = foo.getBar().toBuilder()
Foo.Builder fooBuilder = foo.toBuilder()
quuxBuilder.setNewThing(newThing);
bazBuilder.setQuux(quuxBuilder);
barBuilder.setBaz(bazBuilder);
fooBuilder.setBar(barBuilder);
Foo newFoo = fooBuilder.build();
(これはたった4つのレベルで、私は日常的に5〜8のレベルを扱っています。)
もっと良い方法はありますか?
別のオプションは(私は思う;それは久しぶりです):
Foo.Builder fooBuilder = foo.toBuilder();
fooBuilder.getBarBuilder().getBazBuilder().getQuuxBuilder()
.setNewThing(newThing);
newFoo = fooBuilder.build();
これはこれ以上効率的ではないことに注意してください。まだfoo、bar、baz、quuxのコピーを作成しています。