listOf()返回MutableList

Joe*_*ans 10 java kotlin

在Kotlin中,使用该listOf()函数创建的列表(应该是不可变的)通过类型检查来反对MutableList使用is运算符.

例:

fun main(args: Array<String>) {
    val list = listOf("I'm immutable")

    println(list is MutableList)
}
Run Code Online (Sandbox Code Playgroud)

将打印

真正

有趣的是,使用的空列表listOf<String>()将使检查失败并在返回单例对象时打印falseEmptyList.

经过一番挖掘后,事实证明mutableListOf()创建一个java.util.ArrayListwhile会listOf()最终创建一个java.util.Arrays$ArrayList,但是没有一个类实现MutableList,所以为什么非空列表仍然通过类型检查呢?因此,有没有另一种方法可靠地检查列表是否可变,而不必检查它的实际实现(is ArrayList等)?

yol*_*ole 8

之间的分离ListMutableList是由科特林编译器创建的错觉.在运行时,Kotlin使用Java集合类,它只有一个List包含读取和变异方法的接口.编译时引用ListMutableList编译为java.util.List引用.因此,无法检测列表是否MutableList在运行时.

  • 不,因为Kotlin使用Java集合作为实现类,不仅作为接口定义,而且`java.util.ArrayList`不实现任何Kotlin接口. (2认同)