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