kotlin 协变与逆变

kotlin中没有像java一样的这样的方式,也没有父类向子类转换,但是为了数据的安全性,提出了协变与逆变的说法:

概念:
协变:类型向上转换,像java中的子类向父类转换
逆变:类型向下转换,父类向子类转换

特点:
协变只能出现在返回值中,逆变只能出现在方法的参数中,还有一种既不是协变也不是逆变的类型,什么地方都可以使用例如:

kotlin 协变与逆变_第1张图片
image.png

因为其中的T 出现在了全局变量的地方,所以既不是协变也不是逆变。

逆变的情况(作为参数传入并且不能接受BaseActivityView的泛型作为返回值):


kotlin 协变与逆变_第2张图片
image.png

协变的情况(作为返回值并且不能接受BaseActivityView的泛型作为参数传入):


kotlin 协变与逆变_第3张图片
image.png

使用场景:


kotlin 协变与逆变_第4张图片
image.png

可以移步这里进行更深层次理解 https://neonmori.github.io/2017/07/30/%E7%90%86%E8%A7%A3Kotlin%E4%B8%AD%E7%9A%84%E6%B3%9B%E5%9E%8B%E4%B8%8E%E5%8F%98%E4%BD%93/

你可能感兴趣的:(kotlin 协变与逆变)