一尘不染

对Java协议缓冲区对象进行少量更改

java

我想做一个小的更改,深入到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个级别。)

有没有更好的办法?


阅读 221

收藏
2020-12-03

共1个答案

一尘不染

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

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

注意,这没有任何效率。您仍在复制foo,bar,baz和quux。

2020-12-03