对Java协议进行小的更改缓冲对象 [英] Making a small change to a Java protocol buffers object

查看:85
本文介绍了对Java协议进行小的更改缓冲对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Java协议缓冲区对象的树中进行一些小改动。

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

我可以使用 .getBuilder()创建一个新对象的方法,该对象是一个旧对象的克隆,但有一些更改。

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

(这只是4级,我经常处理5-8级。)

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

有更好的方法吗?

推荐答案

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

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

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

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

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

这篇关于对Java协议进行小的更改缓冲对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆