我们如何在protobuf消息中添加变体消息(几种消息类型之一)?我们如何在protobuf消息中放置变体消息(几种消息类型之一)?
message typeA {
....
}
message typeB {
....
}
message typeC {
[typeB|typeA] payload;
}
我们如何在protobuf消息中添加变体消息(几种消息类型之一)?我们如何在protobuf消息中放置变体消息(几种消息类型之一)?
message typeA {
....
}
message typeB {
....
}
message typeC {
[typeB|typeA] payload;
}
你需要做的是这样的:
message TypeC {
optional TypeA a = 1;
optional TypeB b = 2;
}
如果有很多变种,您可能还需要添加一个标签字段,这样你就不必检查has_*()
为每一个。
这是覆盖在所述的Protobuf文档:https://developers.google.com/protocol-buffers/docs/techniques#union
PS。 Protobufs的这个缺失功能在Cap'n Proto中修复,这是同一作者(我)的新序列化系统:Cap'n Proto为此目的实现了"unions"。在离开Google之前,我还在Protobufs中实施了工会,但是在我离开之前没有设法让我的更改合并到主线。抱歉。 :(
编辑:它看起来像Protobuf团队最终合并我的变化和发布版本2.6.0与它:)见the oneof
declaration。
查核在2.6版本的新oneof
功能:https://developers.google.com/protocol-buffers/docs/reference/java-generated#oneof
你现在可以做这样的事情:
message TypeC {
oneof oneof_name {
TypeA a = 1;
TypeB b = 2;
}
}
域在同oneof
将共享存储器中,只有一个字段可以设为同一时间。
感谢您创造'oneof',你摇滚! – FisherCoder