【发布时间】:2020-01-28 20:55:51
【问题描述】:
我在阅读 Kotlin 参考资料时遇到了几个问题:
在“类型擦除和泛型类型检查”中,它提到:
当您已经静态检查了实例的类型参数时(在编译时 time),您可以进行涉及类型的非泛型部分的 is-check 或强制转换。笔记 在这种情况下,尖括号被省略了
他们举了一个例子:
fun handleStrings(list: List<String>) {
if (list is ArrayList) {
// `list` is smart-cast to `ArrayList<String>`
}
}
Q1:我测试自己
val a = mutableListOf(1, 2, 3)
val b = listOf(1, 2, 3)
println(a is List) //error, should use List<*>
println(b is MutableList) //can compile
我不明白为什么他们得到不同的结果。
Q2:我发现我无法使用从 List 到 ArrayList 的智能转换
println(listOf(1, 2, 3) is ArrayList) //false
println(listOf(1, 2, 3) is MutableList) //true
我记得,listOf() 是由 Kotlin 中的 ArrayList 实现的,它在 Arrays.java 中调用 asList,它返回一个 ArrayList。
那么,为什么 listOf() 不能智能转换为 ArrayList?
【问题讨论】:
标签: kotlin