不允许将枚举用作地图中的键。这里的PaxType是一个枚举,不允许用作密钥。
enum PaxType {
ADULT = 0 ;
CHILD = 1 ;
INFANT = 2 ;
}
message FlightData {
map<PaxType, FareType> fareType = 1;
}
答案 0 :(得分:12)
这是不允许的,因为它与proto3 open enum语义不能很好地兼容。例如,在Java中,如果您有Map,则该键只能是定义的值之一。如果您碰巧从远程客户端/服务器收到的枚举键值不在定义的值集中,则无法将其放入Map中。这个限制迫使我们要么使用未知的枚举键删除map entires(这是针对proto3开放枚举语义),要么将enum作为地图键全部禁止。
供参考:https://groups.google.com/forum/#!topic/protobuf/ikeldBe60eI
答案 1 :(得分:1)
正如 Vivek Sinha 已经说过的那样,不允许将枚举用作地图中的键。但是,您可以使用列表并按照定义枚举的相同顺序填充它。例如,当您编写一个使用生物群落的游戏时,您希望拥有从 biom type
到世界中 number of existing bioms
的映射。这可以按如下方式完成:
enum BiomType {
PLACEHOLDER = 0;
FOREST = 1;
DESERT = 2;
}
message Map {
repeated int32 biom_distribution = 1;
}
当您填充 biom_distribution
列表时,您必须保持枚举中元素的顺序(在本例中为 BiomType
)。