我希望对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个级别。)
有更好的方法吗?
fooBuilder.getBarBuilder()
返回了一个Bar.Builder。测试套件没有显示任何错误,所以它是有效的。代码量仍然随深度线性增长,但至少缩小了三倍。 - fadedbee