【发布时间】:2022-01-28 17:27:15
【问题描述】:
为什么下面的代码可以运行?
fun main(args: Array<String>) {
val somePair: Pair<Any?, Any?> = "items" to listOf("1","2a")
var W=somePair.second as List<Int>
println(W)
}
输出:[1, 2a]
“2a”不是Int,但是W的类型是List,为什么不抛出异常?
【问题讨论】:
-
另请注意,您会收到来自编译器的警告,即未检查强制转换 (
as List<Int>)。 -
强制转换是合法的,因为你将
Any?强制转换为List<Int>,所以这里也不例外,编译器不会分析列表的实际内容。println(W)隐式调用W.toString()(实际上是List.toString(),此处删除了 Int 类型),因此也不会出现异常。如果您打印列表的第二个元素 (println(W[1])) 将引发异常,因为“2a”无法转换为 Int
标签: kotlin