Scala类型系统深入解析
1. 引言
Scala类型系统的部分复杂性源于对Java类型系统特性的支持,以实现互操作性。下面我们从参数化类型开始深入探讨。
2. 参数化类型
参数化类型在之前的学习中已经多次接触。下面我们将回顾一些细节,并补充一些新的知识。
2.1 方差注解
方差注解决定了参数化类型在子类型化时的行为。
- 协变(Covariance) :使用 +
注解,如 List[+A]
,表示 List
在类型参数 A
上是协变的。例如, List[String]
是 List[AnyRef]
的子类型,因为 String
是 AnyRef
的子类型。
- 逆变(Contravariance) :使用 -
注解,如 Function2[-T1, -T2, +R]
,表示函数参数类型是逆变的。
2.2 类型构造器
类型构造器用于创建具体的类型,类似于类的实例构造器用于创建类的实例。例如, List
是 List[String]
和 List[Int]
的类型构造器。