java协议缓冲区3:枚举为映射中的键
不允许将枚举用作映射中的键。这里的PaxType是一个枚举,不允许用作键
enum PaxType {
ADULT = 0 ;
CHILD = 1 ;
INFANT = 2 ;
}
message FlightData {
map<PaxType, FareType> fareType = 1;
}
你可以在下面搜索框中键入要查询的问题!
不允许将枚举用作映射中的键。这里的PaxType是一个枚举,不允许用作键
enum PaxType {
ADULT = 0 ;
CHILD = 1 ;
INFANT = 2 ;
}
message FlightData {
map<PaxType, FareType> fareType = 1;
}
# 1 楼答案
定义您自己的地图条目类型,例如:
您将无法获得
map
的确切语义或行为,例如将具有相同密钥的重复条目减少到最后接收的值,但您将获得相同的兼容性优势和相同的通用实用程序# 2 楼答案
正如维韦克·辛哈(Vivek Sinha)已经说过的,不允许在地图中使用枚举作为键。但是,您可以使用列表并按照定义枚举的相同顺序填充它。例如,当您编写一个使用bioms的游戏时,您希望从世界上的
biom type
到number of existing bioms
进行映射。这可以通过以下方式实现:填充
biom_distribution
列表时,必须保持枚举中元素的顺序(在本例中为BiomType
)# 3 楼答案
这是不允许的,因为它不适合proto3开放枚举语义。例如,在Java中,如果有映射,则键只能是定义的值之一。如果碰巧从远程客户端/服务器接收到的枚举键值不在定义的值集中,则无法将其放入映射中。这种限制迫使我们要么删除具有未知枚举键的映射项(这与proto3 open enum语义相反),要么一起禁止将枚举作为映射键
供参考:https://groups.google.com/forum/#!topic/protobuf/ikeldBe60eI