对 Java protocol buffers 对象进行小改动
Making a small change to a Java protocol buffers object
我想在 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 的副本。
我想在 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 的副本。