Making a small change to a Java protocol buffers object

試著忘記壹切 提交于 2019-12-03 11:15:17

问题


I want to make a small change, deep in tree of Java protocol buffer objects.

I can use the .getBuilder() method to make a new object that is a clone of an old one with some changes.

When this is done at a deep level, the code becomes ugly:

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();

(This is just 4 levels, I'm routinely dealing with 5-8 levels.)

Is there a better way?


回答1:


Another option is (I think; it's been a while):

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

Note that this isn't any more efficient; you're still making copies of foo, bar, baz, and quux.



来源:https://stackoverflow.com/questions/29209153/making-a-small-change-to-a-java-protocol-buffers-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!