在Kotlin中,使用listOf()函数(这应该是不可变的)创建的列表通过使用is运算符对MutableList进行类型检查。
示例:
fun main(args: Array<String>) {
val list = listOf("I'm immutable")
println(list is MutableList)
}将打印
真的
有趣的是,使用listOf<String>()创建的空列表将失败,并在返回单例对象EmptyList时打印false。
经过一番研究,结果发现mutableListOf()创建了一个java.util.ArrayList,而listOf()最终创建了一个java.util.Arrays$ArrayList,但是没有一个涉及到的类实现了MutableList,那么为什么一个非空列表仍然通过类型检查呢?因此,是否有另一种方法可以可靠地检查列表是否是可变的,而无需对照它的实际实现(is ArrayList等)?
发布于 2018-10-01 12:35:05
List和MutableList之间的分离是Kotlin编译器创建的幻觉。在运行时,Kotlin使用Java集合类,它只有一个List接口,包含读取和突变方法。对List和MutableList的编译时引用都编译为java.util.List引用。因此,无法在运行时检测列表是否为MutableList。
https://stackoverflow.com/questions/52580173
复制相似问题