谁能解释一下协变和逆变的概念
编程语言理论?
协方差非常简单,最好从某个集合类的角度来思考List
。我们可以参数化 the List
具有某些类型参数的类T
。也就是说,我们的列表包含类型的元素T
对于一些T
。列表将是协变的,如果
S 是 T 的子类型当且仅当 List[S] 是 List[T] 的子类型
(我使用数学定义iff意思是当且仅当.)
这是一个List[Apple]
is a List[Fruit]
。如果有一些例程接受List[Fruit]
作为参数,我有一个List[Apple]
,然后我可以将其作为有效参数传递。
def something(l: List[Fruit]) {
l.add(new Pear())
}
如果我们的集合类List
是可变的,那么协方差就没有意义,因为我们可能假设我们的例程可以添加一些其他水果(不是苹果),如上所述。因此我们应该只喜欢不可变的集合类是协变的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)