Scala:使用ArrayList的错误类型不匹配错误

Dav*_* L. 1 java scala type-inference scala-collections

谁能解释为什么会出现以下错误(Scala 2.10.3)?

scala> new java.util.ArrayList[Integer]()
res0: java.util.ArrayList[Integer] = []

scala> res0.add(0)
res1: Boolean = true

scala> java.util.Collections.binarySearch(res0, 0)
<console>:9: error: type mismatch;
 found   : java.util.ArrayList[Integer]
 required: java.util.List[_ <: Comparable[_ >: Any]]
              java.util.Collections.binarySearch(res0, 0)
                                                 ^
Run Code Online (Sandbox Code Playgroud)

以下工作:

scala> java.util.Collections.binarySearch[Integer](res0, 0)
res4: Int = 0
Run Code Online (Sandbox Code Playgroud)

奇怪的是编译器会抱怨某个特定的类型,直到我对这个不正确的类型更加明确,然后它会接受它.

编辑:

另请注意,如果您将第一步更改为:

scala> new java.util.ArrayList[Int]()
Run Code Online (Sandbox Code Playgroud)

还有一个非常相似的错误.

Rég*_*les 8

试试这个:

java.util.Collections.binarySearch(res0, 0: Integer)
Run Code Online (Sandbox Code Playgroud)

如你所见,它编译得很好.问题是0有类型Int,而不是Integer.所以你必须以某种方式告诉scala你想要转换0成一个Integer值.

就目前而言,您的代码会触发编译器查找一个方法binarySearch,该方法将ArrayList[Integer]第一个参数作为第一个参数,并将其Int作为第二个参数.