我知道这似乎是一个重复的问题,但我对于不变性,协方差和逆变是如何工作感到困惑。
我无法理解为什么我无法编译此代码段:
class Test<X: List<Any>>{
lateinit var list2:List<Any>
lateinit var list1:X
fun putList(){
list2 = emptyList()
list1 = emptyList<Any>()
}
}
我收到类型不匹配错误必需的X找到列表
但是,如果我将X泛型定义为&#39; out&#39;我将得到一个错误,指示参数X在list1 var。
中是不变的有人可以帮助另一个可怜的灵魂在Kotlin仿制药中迷失吗?
答案 0 :(得分:1)
简短回答:变量postroll
是协变的,你试图以逆变的方式使用它。
您当前要做的事情:将超类型的实例(由上限指定)list1
分配给其子类型List<Any>
的变量,即{{1} }。要简化问题,请考虑以下事项:
X
您根本无法将对象分配给该对象的子类型的变量。另一种方式是好的:list1