kotlin - 为什么在 Kotlin 中可以从逆变列表中读取

标签 kotlin contravariance mutablelist

我在 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/

相关文章:

c# - 使用通用接口(interface)约束时的协变/逆变难题

kotlin - 在 kotlin 中可变的列表类型可以在 java 中使用吗?

java - Kotlin 中 MutableList 成员的索引访问运算符重载

java - 如何从 Android kotlin 中的非 Activity 类开始新 Activity ?

android - KotterKnife - 某些类不能使用 bindView(R.id.example_id)

android - 如何更改 BottomSheetDialog 的关闭行为的敏感度

android - kotlin 中的广播接收器

Kotlin 泛型函数和逆变

c# - IEnumerable<T> 等于 ICollection<T> 类型检查