介绍
小编给大家分享一下Java中芬兰湾的科特林的协变与逆变是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
Java基础教程栏目今天介绍芬兰湾的科特林的协变与逆变。
前言
为了更好地理解芬兰湾的科特林和Java中的协变与逆变,先看一些基础知识。
普通赋值
在Java中,常见的赋值语句如下:
A=b;复制代码
赋值语句必须满足的条件是:左边要么是右边的父类,要么和右边类型一样,即的类型要“大”于b的类型,比如<代码>对象o=新的字符串(“s");> 代码。为了方便起见,下文中称作一个比;b .
除了上述最常见的赋值语句,还有两种其他的赋值语句:
函数参数的赋值
公共空有趣(一){}//调用处赋值B B=new (); 有趣的(b);复制代码
在调用有趣的(b)方法时,会将传入的b b实参赋值给形参一个,即<代码> A=b> 代码的形式。同样的,必须要满足形参类型大于实参,即比;b .
函数返回值的赋值
公众一个有趣的(){ B B=new ();返回b; } 复制代码
函数返回值类型接收实际返回类型的值,实际返回类型B B相当于赋值给了函数返回值类型的,即B B赋值给了一个,即<代码> A=B> 代码,那么必须满足比;B的类型关系。
所以,无论哪种赋值,都必须满足左边类型比;右边类型,即在b .
Java中的协变与逆变
有了前面的基础知识,就可以方便地解释协变与逆变了。
如果类比;类B,经过一个变化反式后得到的反式(A)与反式(B)依旧满足反式(A)在反式(B),那么称为<强>协变强>。
逆变则刚好相反,如果类比;类B,经过一个变化反式后得到的反式(A)与反式(B)满足反式(B)比;反式(A),称为<>强逆变强>。
比如大家都知道Java的数组是协变的,假如比;B,那么有[]比;B[],所以B[]可以赋值给一个[]。举个例子:
Integer [] num=new Integer [] {}; 对象[]o=num;//可以赋值,因为数组的协变特性所以由对象比;整得到对象[]比;整数[]复制代码
但是Java的泛型则不满足协变,如下:
Listl=new ArrayList<在(); List
上述代码报的错,就是因为,虽然对象比;整数,但是由于泛型不满足协变,所以<代码> List