我很惊讶我们可以将List [Nothing]分配给任何列表。喜欢这个
val nums : List[Number] = List(1, 2, 3, 4)
val nums_2 : List[Integer] = Nil; // <--- extends List[Nothing]
val ints : List[Integer] = nums // error: type mismatch
所以,这非常令人困惑。在this article,他们说
因为列表在Scala中是协变的,所以这样做 scala.collection.immutable.Nil
List[T]
的实例,适用于任何元素 类型为T
。
这是什么意思?
答案 0 :(得分:1)
如果泛型类型在给定类型参数中是协变的(在类型定义中的类型参数之前用+
表示,如abstract class List[+T]
),则表示如果有两种类型{{ 1}}和T
,U
是T
的子类型,U
也是List[T]
的子类型。
因此,一个应该包含List[U]
的变量也可以包含List[Any]
,因为List[String]
是String
的子类型和一个应该包含Any
的变量1}}也可以包含List[Whatever]
因为List[Nothing]
是每种类型的子类型(在这方面它有点神奇)。