协变(Covariance)和逆变(Contravariance)

协变(Covariance)

假如有以下两个类型:

class 动物 {}
class 狗: 动物 {}

继承类动物,那么可以隐式转换为动物,我们称为可以协变为动物

逆变(Contravariance)

假如有一个函数类型:

(x: 狗) => void

这个类型表示接收一个参数为的函数,使用这个函数时,传入动物是不对的,因为动物无法隐式转换为(如果可以的话,那我可以把隐式转换为动物,然后隐式转换为)。

假如现在有另一个函数类型:

(x: 动物) => void

这个函数接收参数为动物,所以显然支持把作为参数传入,这意味着这个函数可以代替(即隐式转换)要求参数确定为的另一个函数:(x: 狗) => void,即:

(x: 动物) => void 可以隐式转为 (x: 狗) => void

总结地说,类型A可以协变为类型B时,类型 (x: B) => T 可以协变为 (x: A) => T,这里AB发生的颠倒,称为 (x: A) => T 逆变为 (x: B) => T

打赏
微信扫一扫支付
这篇文章对你有用?
微信logo 微信扫一扫,打赏 1 元表示支持吧~

发表评论

电子邮件地址不会被公开。