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的字符串类型。
我有两条消息,一条是空的,另一条是满的,我想用完整消息中的所有字段填充空消息,就像 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的字符串类型。