无法添加 protobuf 自动生成类的所有实例序列

Mek*_*iki 5 java scala protocol-buffers

我有两个 protobuf 消息,其中

message A {
    ...
}

message B {
    repeated A hoge = 1;
}
Run Code Online (Sandbox Code Playgroud)

protoc 生成 Java 代码:

public Builder addAllA(java.lang.Iterable<? extends A> values) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但下面的 Scala 代码会导致类型不匹配,预期:Iterable[_ <: A],实际:Iterable[A]

B.newBuilder().addAllA(A.newBuilder().build().toIterable)
Run Code Online (Sandbox Code Playgroud)

我怎样才能添加AllA?

nik*_*oro 1

对于我的简化示例,这是有效的,所以至少您可以尝试:

import scala.collection.JavaConverters._

B.newBuilder().addAllA(A.newBuilder().build().toIterable.asJava)
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,错误是由于 java Iterable 和 scala 协方差类型检查的不变性而出现的,但不确定。