我们使用协议缓冲区将数据存储在数据库中(作为 blob)。在某些时候,我们再次阅读它们,需要修改它们并再次存储它们。
问题是,协议缓冲区消息对象是不可变的。我们想到的只是使用协议缓冲区消息作为原型创建一个新的构建器对象:
Foo.Builder.newBuilder(prototype)
这基本上有效。但是由于我们有一个嵌套结构,所以原型对象实际上包含属性本身就是消息,这是行不通的。文档摘录:
由于嵌入的消息和字符串对象是不可变的,它们在原始和副本之间共享。
有没有办法将整个结构克隆到可变的新构建器对象?