我們如何在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