首页 > 解决方案 > 为什么在 Kotlin 中可以从逆变列表中读取

问题描述

我在 Kotlin 中遇到了这个问题我有一个 Int 类型的可变列表,它应该只用于写入,但是它允许我从中读取

{

    val listOfInt: MutableList<in Int> = mutableListOf<Number>(1.3434, 4.432)
    println(listOfInt[0])

    1.3434

}

虽然它不会让我只是简单地创建而不指定仅用于写作

{

val listOfInt: MutableList<Int> = mutableListOf<Number>(1.3434, 4.432)

}

至于逆变,您不应该能够从中获取任何数据。这是一个错误还是一个功能?

谢谢

标签: kotlincontravariancemutablelist

解决方案


逆变并不妨碍你阅读。它只会阻止编译器知道有关检索项目类型的任何具体信息,因此编译器将它们视为Any?始终安全且不需要强制转换的方式。另一方面,协方差确实完全阻止您写入列表,因为如果您不知道特定的允许类型绑定,那么将任何内容放入列表中都是安全的。


推荐阅读