在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等)?
之间的分离List和MutableList是由科特林编译器创建的错觉.在运行时,Kotlin使用Java集合类,它只有一个List包含读取和变异方法的接口.编译时引用List和MutableList编译为java.util.List引用.因此,无法检测列表是否MutableList在运行时.
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |