我正在阅读《深入Scala》的第一节,第一节中有两句话是关于“协方差”和“逆变”:
协变(+T 或 ? extends T)是指类型可以沿着继承层次结构强制向下。
逆变(-T 或 ? super T)是指类型可以在继承层次结构中强制向上。
我读过一些有关“协方差”和“逆变”的文档,但在这种情况下我无法理解“强制向下”和“向上强制”一词。
[TOP / ABSTRACT]
Thing
↓
Animal
↓
Human
↓
Programmer
↓
Scala Dev
[BOTTOM / SPECIFIC]
协方差:接受 T 或更低。
我要求一个[+Human]
,我会接受其中任何一个:[Human, Programmer, Scala Dev]
.
逆变:接受T或更高。
我要求一个[-Human]
,我会接受其中任何一个:[Thing, Animal, Human]
.
不稳定性:接受T并且只接受T。
强迫。
在类型层次结构中向上/向下强制类型意味着检查类型的超级/子类型是否通过类型约束。例如,协变函数需要Human
但我们只有一个Programmer
,没关系,编译器可以coerce the Programmer
into Human
以满足打字限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)