在 Kotlin 中,使用listOf()函数创建的列表(应该是不可变的)通过MutableList使用is运算符的类型检查。例子:fun main(args: Array<String>) { val list = listOf("I'm immutable") println(list is MutableList)}将打印真的有趣的是,使用创建的空列表listOf<String>()将无法通过检查并打印false,因为它返回单例对象EmptyList。经过一番挖掘,结果是mutableListOf()创建一个java.util.ArrayListwhilelistOf()最终创建了一个java.util.Arrays$ArrayList,但没有一个类涉及到 implement MutableList,那么为什么非空列表仍然通过了类型检查呢?因此,是否有一种替代方法可以可靠地检查列表是否可变,而无需检查它的实际实现(is ArrayList等)?
1 回答
慕村225694
TA贡献1880条经验 获得超4个赞
List
和之间的分离MutableList
是 Kotlin 编译器创建的一种错觉。在运行时,Kotlin 使用 Java 集合类,它只有一个List
包含读取和变异方法的接口。对List
和 的编译时引用MutableList
都编译为java.util.List
引用。因此,无法MutableList
在运行时检测列表是否为 a 。
添加回答
举报
0/150
提交
取消