我在 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)
}至于逆变,您不应该能够从中获取任何数据。
这是一个错误还是一个功能?
谢谢
最佳答案
逆变并不妨碍你阅读。它只会阻止编译器知道有关检索项目类型的任何特定信息,因此编译器将它们视为 Any?
这总是安全的,不需要类型转换。另一方面,协变确实完全阻止您写入列表,因为如果您不知道特定的允许类型绑定(bind),那么将任何内容放入列表中都是安全的。
关于kotlin - 为什么在 Kotlin 中可以从逆变列表中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64027240/