0

我一直在尝试将 Java List> 打包到 protobuf3 消息中,我只是想知道定义可以打包这样一个 List 的 proto 文件以及如何有效映射它的最佳方法是什么,因为我一直在尝试和无法让它工作。

我最初的想法:

// Proto file
message TutorialAPIResponse {
    repeated google.protobuf.Any values = 1;
}

//Packaging
List<List<Object>> apiValues = Api.getWhatever();
AnalyzeSignalsResponse response = AnalyzeSignalsResponse.newBuilder()
                // line below gives compile error "error: incompatible types: List<List<Object>> cannot be converted to Iterable<? extends Any>"
                .addAllValues(values) 
                .build();
4

1 回答 1

2

您不能真正在 protobuf 中表达双重嵌套列表;你需要表达一个本身一个列表的东西的列表;所以.. aList<Foo>对于某些Foo具有List<Object>, 或 protobuf 条款的人:

message TutorialAPIResponse {
    repeated Foo items = 1;
}
message Foo {
    repeated google.protobuf.Any values = 1;
}

另外,我个人会避免使用Any. 如果你不能不说就表达你要返回的东西Any,IMO 它不是一个好的 API 表面。

于 2019-08-19T12:36:30.353 回答