我理解术语协方差和反方差.但是有一件小事我无法理解.在课程"Scala中的功能编程"课程中,Martin Ordersky提到:
函数在其参数类型中是逆变的,在它们的返回类型中是共变量的
所以例如在Java中,让我们Dog
扩展Animal
.让一个函数是:
void getSomething(Animal a){
Run Code Online (Sandbox Code Playgroud)
我有函数调用
Dog d = new Dog();
getSomething(d)
Run Code Online (Sandbox Code Playgroud)
所以基本上发生的事情就是这样Animal a = d
.根据维基的协方差是"将范围扩大到狭窄".上面我们正在从狗转变为动物.SO不是参数类型协变而不是逆变?
在Scala课程的FP中,Martin提到,论证是"逆变",而返回类型是"协变".我不认为我完全理解这一点 - 有人可以帮助这个吗?