热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《对Java协议进行小的更改缓冲对象》经验,为你挑选了1个好方法。

我想在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> Kenton Varda..:

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

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

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


如果愿意,可以始终将对象长期保持在“ Builder”形式,而不是不可变的消息形式,然后可以保留指向要修改的特定子生成器的指针,并反复对其进行修改。但是要注意可变对象的常见设计问题。
推荐阅读
author-avatar
平凡天使zj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有