通用类型如何在Scala中运行?

时间:2016-08-10 12:03:00

标签: list scala

我很惊讶我们可以将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

这是什么意思?

1 个答案:

答案 0 :(得分:1)

如果泛型类型在给定类型参数中是协变的(在类型定义中的类型参数之前用+表示,如abstract class List[+T]),则表示如果有两种类型{{ 1}}和TUT的子类型,U也是List[T]的子类型。

因此,一个应该包含List[U]的变量也可以包含List[Any],因为List[String]String的子类型和一个应该包含Any的变量1}}也可以包含List[Whatever]因为List[Nothing]是每种类型的子类型(在这方面它有点神奇)。