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 中,需要装箱原语才能参与泛型。
我在 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 中,需要装箱原语才能参与泛型。