我试过这个,但有范围问题。
message DataCollectionMessage {
message subData
{
message SubDataList {
repeated string data = 1;
}
map<string, subData> parameters = 1;
}
map<string,SubDataList> parameters =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 代码的相关部分。