listOf()返回MutableList

时间:2018-09-30 17:04:43

标签: java kotlin

在Kotlin中,使用listOf()函数(which should be immutable)创建的列表使用MutableList运算符对is进行了类型检查。

示例:

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

    println(list is MutableList)
}

将打印

  

true

有趣的是,使用listOf<String>()创建的空列表将失败,并在返回单例对象EmptyList时显示 false

经过一番挖掘,结果发现mutableListOf()创建了一个java.util.ArrayList,而listOf()最终创建了一个java.util.Arrays$ArrayList,但是涉及的所有类都没有实现{{1} },为什么非空列表仍通过类型检查呢?因此,是否有另一种方法可以可靠地检查列表是否可变,而不必检查列表的实际实现(MutableList等)?

1 个答案:

答案 0 :(得分:8)

ListMutableList之间的分隔是Kotlin编译器造成的一种幻觉。在运行时,Kotlin使用Java集合类,它们只有一个包含读取和变异方法的List接口。对ListMutableList的编译时引用都被编译为java.util.List引用。因此,在运行时无法检测列表是否为MutableList