如何理解“协方差”和“逆变”这两句话?

2024-04-18

我正在阅读《深入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(使用前将#替换为@)

如何理解“协方差”和“逆变”这两句话? 的相关文章

随机推荐