Viv*_*nha 8 java enums hashmap protocol-buffers
枚举不允许在地图中用作键.这里的PaxType是枚举,不允许用作键.
enum PaxType {
ADULT = 0 ;
CHILD = 1 ;
INFANT = 2 ;
}
message FlightData {
map<PaxType, FareType> fareType = 1;
}
Run Code Online (Sandbox Code Playgroud)
Viv*_*nha 14
这是不允许的,因为它与proto3 open enum语义不能很好地兼容.例如,在Java中,如果您有Map,则该键只能是定义的值之一.如果您碰巧从远程客户端/服务器收到的枚举键值不在定义的值集中,则无法将其放入Map中.这种限制迫使我们要么使用未知的枚举键删除map entires(这是针对proto3开放枚举语义),要么将enum作为地图键一起禁止枚举.
供参考:https://groups.google.com/forum/#!topic/protobuf/ikeldBe60eI
定义您自己的地图条目类型,例如:
enum MyEnum {
FOO = 0;
BAR = 1;
BAZ = 2;
}
message MapEntry {
MyEnum type = 1;
int32 count = 2;
}
message MyMessage {
repeated MapEntry counts = 1;
}
Run Code Online (Sandbox Code Playgroud)
您不会获得 a 的确切语义或行为map,例如具有相同键的重复条目被减少到最后接收的值,但您将获得相同的兼容性优势和相同的通用实用程序。
| 归档时间: |
|
| 查看次数: |
4115 次 |
| 最近记录: |