猿问

listOf() 返回 MutableList

在 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等)?


鸿蒙传说
浏览 268回答 1
1回答

慕村225694

List和之间的分离MutableList是 Kotlin 编译器创建的一种错觉。在运行时,Kotlin 使用 Java 集合类,它只有一个List包含读取和变异方法的接口。对List和 的编译时引用MutableList都编译为java.util.List引用。因此,无法MutableList在运行时检测列表是否为 a&nbsp;。
随时随地看视频慕课网APP

相关分类

Java
我要回答