这里我们转载Twitter的Scala课堂 ,转载的内容基本来自Twitter的Scala课堂中文翻译,部分有小改动.
变性 Variance
Scala的类型系统必须同时解释类层次和多态性。类层次结构可以表达子类关系。在混合OO和多态性时,一个核心问题是:如果T’是T一个子类,Container[T’]应该被看做是Container[T]的子类吗?变性(Variance)注解允许你表达类层次结构和多态类型之间的关系:
含义 | Scala 标记 | |
协变covariant | C[T’]是 C[T] 的子类 | [+T] |
逆变contravariant | C[T] 是 C[T’]的子类 | [-T] |
不变invariant | C[T] 和 C[T’]无关 | [T] |
子类型关系的真正含义:对一个给定的类型T,如果T’是其子类型,你能替换它吗?