我想做一个小的更改,深入到Java协议缓冲区对象的树中。
我可以使用该.getBuilder()方法来制作一个新对象,该对象是旧对象的克隆并进行一些更改。
.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。