Есть ли способ реализовать 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.

Другие вопросы по тегам