2

我试过这个,但有范围问题。

message DataCollectionMessage {

    message subData
    {
        message SubDataList {
            repeated string data = 1;
        }
        map<string, subData> parameters = 1;
    }
    map<string,SubDataList> parameters =1;
}

这里 SubDataList 和 subData 有未解析的引用。

4

1 回答 1

0

问题中的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 代码的相关部分。

于 2017-08-25T01:57:58.140 回答