任何人都可以解释为什么会出现以下错误(斯卡拉2.10.3)?斯卡拉:错误的类型不匹配错误使用ArrayList
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)
^
下不工作:
scala> java.util.Collections.binarySearch[Integer](res0, 0)
res4: Int = 0
这似乎很奇怪,编译器会抱怨一个特定类型的,直到我关于不正确的类型更加明确,然后它会接受它。
编辑:
还要注意,如果你改变的第一步:
scala> new java.util.ArrayList[Int]()
也有一个非常类似的错误。
有道理,但我仍然不知道我知道消息的逻辑。是不是'Integer'不符合'_ <:Comparable [_>:Any]',但是'Int'呢? – david
那么编译器不知道错误是来自第一个参数的类型,还是来自第二个(或两个)的类型。 所有它可以告诉的是,这种类型的组合是无效的(没有'binarySearch'方法可以将'ArrayList [Integer]'作为它的第一个参数,而'Int'作为它的第二个方法。如果编译器只是说它不能发出给定输入类型的呼叫,而不是发出可能导致您认为只有第一个参数有故障的消息,那么更好。 –
但是,如果我执行完全相同的步骤,只是将初始'List'创建更改为'new java.util.ArrayList [Int]()',我会得到相同的错误!你的解释不应该这样做吗?谢谢。 – david