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

时间:2015-03-23 11:31:37

标签: java protocol-buffers

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:19)

另一种选择是(我认为;它已经有一段时间了):

Foo.Builder fooBuilder = foo.toBuilder();
fooBuilder.getBarBuilder().getBazBuilder().getQuuxBuilder()
    .setNewThing(newThing);
newFoo = fooBuilder.build();

请注意,这不是更有效;你还在复制foo,bar,baz和quux。