据我所知,Kotlin 是一种静态类型语言,所有类型都是在编译时定义的。
这是一个返回不同类型的 when
表达式:
fun main(){
val x = readLine()?.toInt() ?: 0
val y = when(x){
1 -> 42
2 -> "Hello"
else -> 3.14F
}
println(y::class.java)
}
在运行时(JVM 1.8 上的 Kotlin 1.3.41),输出如下:
当x
= 1时,它打印class java.lang.Integer
当x
= 2时,它打印class java.lang.String
否则,它会打印class java.lang.Float
编译器什么时候确定y
的类型?或者,编译器如何在编译时推断 y
的类型?
最佳答案
实际上,在这种情况下,when 表达式的类型解析为 Any
,因此 y
变量可以具有任何值。 IDE 甚至警告您,类型 X 的条件分支结果隐式转换为 Any
,至少 Android Studio 是这样,以及 Kotlin Playground .
关于Kotlin - `if` 和 `when` 表达式的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479824/