2016-12-14 5 views
3

Перечисления не могут использоваться в качестве ключей на карте. PaxType здесь является перечислением и не разрешается использовать в качестве ключа.Буферы протоколов 3: Перечисления как ключи на карте

enum PaxType { 
    ADULT = 0 ; 
    CHILD = 1 ; 
    INFANT = 2 ; 
} 

message FlightData { 
    map<PaxType, FareType> fareType = 1; 
} 

ответ

6

Это недопустимо, потому что оно не очень хорошо работает с семантикой proto3 open enum. Например, в Java, если у вас есть карта, ключ может быть только одним из определенных значений. Если вам удастся получить значение ключа перечисления с удаленного клиента/сервера, не входящего в заданное значение, его нельзя поместить в Карту. Это ограничение заставляет нас либо отбрасывать карту с неизвестными ключами enum (что противоречит семантике семантики proto3), либо запретить перечисление в качестве ключей карты вместе.

для справки: https://groups.google.com/forum/#!topic/protobuf/ikeldBe60eI