我是 Scala 的新手,目前正在学习 Scala 中的类型参数,我遇到了以下场景。
假设我有 2 个类A
,B
其中B
是 的子类型A
。
class A {
...
}
class B extends A {
...
}
所以我可以说B <: A
。
这是否也意味着List[B] <: List[A]
?
在 List 的情况下,它B <: A
确实暗示List[B] <: List[A]
,因为 List 的类型参数是协变的。使类型参数协变意味着它只能出现在List定义中的协变位置,即只能作为方法的返回类型出现,不能作为参数的类型出现。“Scala 之旅”包含一个关于变量的部分。维基百科也有一篇关于方差的好文章。类型参数方差的三个选项是:
C[A]
不是 的子类型,无论和是C[B]
什么关系。例如数组等可变数据结构。A
B
B <: A
暗示C[B] <: C[A]
。示例是不可变的数据结构或函数的返回类型。A <: B
暗示C[B] <: C[A]
。例如,函数的参数类型是逆变的。