kotlin - 为什么在 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)
}
至于逆变,您不应该能够从中获取任何数据。这是一个错误还是一个功能?
谢谢
解决方案
逆变并不妨碍你阅读。它只会阻止编译器知道有关检索项目类型的任何具体信息,因此编译器将它们视为Any?
始终安全且不需要强制转换的方式。另一方面,协方差确实完全阻止您写入列表,因为如果您不知道特定的允许类型绑定,那么将任何内容放入列表中都是安全的。
推荐阅读
- polymer-3.x - 在 stackblitz 中找不到包,即使它存在于 npm 网站中。那怎么安装呢?
- appium - 如何使用 Appium 启用/禁用应用程序权限?
- python - 如何在文本 PYTHON 中插入两个以上的变量
- jpa - java流api和事务批处理
- html - 加载后,所有扩展面板都处于打开状态,使用 Angular 材料
- sql - 根据大小写在 SQL Server 表行中显示自定义值
- python - 如何一起使用 sklearn 库和数据存储 memcache?
- c - C中的for循环条件
- database - 从 1NF 到 3NF 的归一化
- ios - 如何为图像 UIImagePicker Swift 4 添加属性