对Java协议缓冲区对象进行小的更改



我想在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。

最新更新