我想做一个小的变化,深入
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.