java - listOf() 返回 MutableList
问题描述
在 Kotlin 中,使用该listOf()
函数创建的列表(应该是不可变的)MutableList
通过使用运算符的类型检查is
。
例子:
fun main(args: Array<String>) {
val list = listOf("I'm immutable")
println(list is MutableList)
}
将打印
真的
有趣的是,使用创建的空列表listOf<String>()
将无法通过检查并在返回单例对象时打印falseEmptyList
。
经过一番挖掘,结果是mutableListOf()
创建了java.util.ArrayList
whilelistOf()
最终创建了 a java.util.Arrays$ArrayList
,但所涉及的类都没有实现MutableList
,那么为什么非空列表仍然通过类型检查呢?因此,是否有另一种方法可以可靠地检查列表是否可变,而无需检查它的实际实现(is ArrayList
等)?
解决方案
List
和之间的分离MutableList
是 Kotlin 编译器制造的一种错觉。在运行时,Kotlin 使用 Java 集合类,它只有一个List
包含读取和变异方法的接口。编译时引用List
和MutableList
都编译为java.util.List
引用。因此,无法MutableList
在运行时检测列表是否为 a。
推荐阅读
- javascript - 为什么此应用程序中的绑定无法更新?
- powerbi - 每个子组的百分比
- python - 管理浮点精度 - 最佳实践?
- json - json 导入是否因为 JSON 文件而失败?
- r - ggplot将文本添加到R中的圆环图的中心
- node.js - 在 Angular 应用程序中,我不断收到此错误找不到模块“fs”
- r - qdapRegex::rm_nchar_words 在涉及非英文字母时返回不同的结果?
- mysql - 在 mysql db 中创建表,错误 1064 (42000)?
- vb.net - 如何从数据库中的 3 个表中收集自定义数据
- android - SwipeRefreshLayout 是否与具有多个 viewType 的适配器兼容?