不变性

默认情况下,所有类型参数都是不变的 - 给定 trait A[B],我们说“AB 上是不变的”。这意味着给定两个参数化 A[Cat]A[Animal],我们断言这两种类型之间没有子/超类关系 - 它不包含 A[Cat] <: A[Animal]A[Cat] >: A[Animal],无论 CatAnimal 之间的关系如何。

方差注释为我们提供了一种声明这种关系的方法,并对类型参数的使用施加了规则,以使关系保持有效。