Я знаю, что это может показаться повторяющимся вопросом, но я озадачен тем, как работают инвариантность, ковариантность и контравариантность.
Я не могу понять, почему я не могу скомпилировать этот фрагмент:
class Test<X: List<Any>>{
lateinit var list2:List<Any>
lateinit var list1:X
fun putList(){
list2 = emptyList()
list1 = emptyList<Any>()
}
}
Я получаю сообщение об ошибке несоответствия типа Required X found List
Однако, если я определю общий X как «out», я получу ошибку, указывающую, что параметр X является инвариантным в list1 var.
Может ли кто-нибудь помочь еще одной бедной душе, заблудившейся в дженериках Kotlin?