Java/Scala 要求:可迭代[_ <: Float],找到:可迭代[Float]

Java/Scala Required: Iterable[_ <: Float], found: Iterable[Float]

我在 Java 中有一个定义为

的 protobuf 方法
public Builder addAllTensor(
          Iterable<? extends Float> values)

我用 val a: ArrayList[Float] 在 Scala 中调用该方法,在代码检查期间没问题,但在构建期间出错

type mismatch;
 found   : java.util.ArrayList[scala.Float]
 required: Iterable[_ <: java.lang.Float]

但是用 a.toIterable 调用它会在代码检查中引发错误(在 IntelliJ IDEA 中)

Required: Iterable[_ <: Float], found: Iterable[Float] 

(这怎么会是类型不匹配...) 只是想知道为什么...

问题在于 scala.Float 与 Java 的 Float

自动转换不会在集合内部发生,您必须以某种方式创建 Java 的 Float.

的集合

(编辑) 更多上下文(感谢@Suma):Scala 的 Float 对应于 Java 的 float,并且 Java 容器只能包含 Float,不能包含 float,因为在 Java 中,需要装箱原语才能参与泛型。