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

Protocol buffers Protobuf:如何用另一条消息的所有字段填充一条消息,protocol-buffers,Protocol Buffers,我有两条消息,一条是空的,另一条是满的,我想用完整消息中的所有字段填充空消息,就像BeanUtils.copyProperties(dest,orig)do一样。似乎没有API允许我这样做,有什么想法吗?您可以使用toBuilder()方法从现有的消息创建一个新的Builder初始化: MyMessage.Builder builder = myMessage.toBuilder(); 这通常用于更改一个字段,如: MyMessage newMessage = myMessage.toBuil

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

您可以使用
toBuilder()
方法从现有的
消息创建一个新的
Builder
初始化:

MyMessage.Builder builder = myMessage.toBuilder();
这通常用于更改一个字段,如:

MyMessage newMessage = myMessage.toBuilder().setFoo(123).build();
如果您已经有了一个
生成器
,并且希望将字段从现有mesasge复制到其中,则可以使用
mergeFrom()

请注意,未将其设置为myMessage的字段将被单独保留,因此名称为“merge”


编辑:如果您问如何将字段复制到现有消息对象(即不是生成器),那么答案是您不能。消息对象是不可变的,就像Java的字符串类型一样。

您可以使用
toBuilder()
方法从现有的
消息创建一个新的
Builder
初始化:

MyMessage.Builder builder = myMessage.toBuilder();
这通常用于更改一个字段,如:

MyMessage newMessage = myMessage.toBuilder().setFoo(123).build();
如果您已经有了一个
生成器
,并且希望将字段从现有mesasge复制到其中,则可以使用
mergeFrom()

请注意,未将其设置为myMessage的字段将被单独保留,因此名称为“merge”


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

什么编程语言?什么编程语言?谢谢你的回答,但是我认为protobuf没有提供一种从另一个消息填充消息的方法,你提到的方法toBuilder,创建一个新消息而不是原始消息,我需要的是,从另一条消息中填充一条消息,而不是创建一条新消息。@July:正如我所说的,如果您已经有了一个要修改的生成器对象,那么可以使用
mergeFrom()
复制域。(请注意,消息对象(与构建器相反)是不可变的——您根本无法更改消息对象。因此,如果您询问如何复制到现有消息对象中,则无法更改。)感谢您的回复,但是我认为protobuf并没有提供从另一个消息填充消息的方法,您提到的方法toBuilder,创建原始邮件以外的新邮件,我需要的是从另一封邮件中填充一封邮件,而不是创建一封新邮件。@July:正如我所说的,如果您已经有一个要修改的生成器对象,可以使用
mergeFrom()
复制字段。(请注意,消息对象(与构建器相反)是不可变的——您根本无法更改消息对象。因此,如果您询问如何复制到现有消息对象中,则不能。)