kotlin中没有像java一样的<? extends T>这样的方式,也没有父类向子类转换,但是为了数据的安全性,提出了协变与逆变的说法:
概念:
协变:类型向上转换,像java中的子类向父类转换
逆变:类型向下转换,父类向子类转换
特点:
协变只能出现在返回值中,逆变只能出现在方法的参数中,还有一种既不是协变也不是逆变的类型,什么地方都可以使用例如:
因为其中的T 出现在了全局变量的地方,所以既不是协变也不是逆变。
逆变的情况(作为参数传入并且不能接受BaseActivityView的泛型作为返回值):
协变的情况(作为返回值并且不能接受BaseActivityView的泛型作为参数传入):
使用场景:
可以移步这里进行更深层次理解 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/