Есть ли способ реализовать map<string, map <string, list <string >>> в protobuf 3?
Я пытался это, но есть проблемы с областью
message DataCollectionMessage {
message subData
{
message SubDataList {
repeated string data = 1;
}
map<string, subData> parameters = 1;
}
map<string,SubDataList> parameters =1;
}
Здесь SubDataList и subData имеют неразрешенные ссылки.
1 ответ
В этом вопросе есть только одна незначительная проблема с protobuf: самая внутренняя карта использует subData
и внешняя карта использует SubDataList
, но должно быть наоборот:
message DataCollectionMessage {
message SubData {
message SubDataList {
repeated string data = 1;
}
map<string, SubDataList> parameters = 1;
}
map<string, SubData> parameters = 1;
}
(Я также с большой буквы SubData
для согласованности.)
Сгенерированный код Java будет иметь следующие классы (для ясности перерезан и переупорядочен):
public static final class DataCollectionMessage {
public Map<String, DataCollectionMessage.SubData> getParametersMap() { ... }
public static final class SubData {
public Map<String, DataCollectionMessage.SubData.SubDataList> getParametersMap() { ... }
public static final class SubDataList {
public ProtocolStringList getDataList() { ... }
}
}
}
Обратите внимание, что SubDataList
имеет ProtocolStringList
это как List<String>
,
Если вы получите другие результаты, опубликуйте используемый вами файл protobuf и соответствующие части сгенерированного кода Java.