Protobuf:如何用另一条消息的所有字段填充一条消息

Protobuf: How to fill one message with all fields from another message

我有两条消息,一条是空的,另一条是满的,我想用完整消息中的所有字段填充空消息,就像 BeanUtils.copyProperties(dest, orig) 一样。好像没有API让我做这样的事情,有什么想法吗?

您可以使用 toBuilder() 方法从现有 Message 初始化一个新的 Builder

MyMessage.Builder builder = myMessage.toBuilder();

这通常用于更改一个字段,例如:

MyMessage newMessage = myMessage.toBuilder().setFoo(123).build();

如果您已经有一个 Builder 并且您想将现有消息中的字段复制到其中,您可以使用 mergeFrom():

builder.mergeFrom(myMessage);

请注意,未设置的字段 myMessage 将保持不变,因此名称为 "merge"。

编辑:如果您询问如何将字段复制到现有消息对象中——即不是构建器——答案是不能。消息对象是不可变的,就像Java的字符串类型。