kotlin - Kotlin - `if` 和 `when` 表达式的类型
问题描述
我知道 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 甚至会警告您,Conditional branch result of type X is implicitly cast to Any
至少 Android Studio 和Kotlin Playground都会这样做。
推荐阅读
- android - ObjectAnimator,如何移动对象两次?
- spring - 如何分别为多个控制器在多个文件中编写Spring Boot测试用例
- caching - 创建/更新/删除后如何清除 .Net Core 上的响应缓存?
- angular - Angular 6将行转换为多列
- magento - 导入产品未显示在前端页面上
- angular - 未在 POST 响应中设置标头
- reactjs - 我可以在哪里更改 react-admin 标题中的个人资料图片?
- python - 列出对 Pandas 列的理解结果:不可散列类型:'dict'
- c++ - 如何在程序的调试版本和编译版本的相对路径之间“动态”更改?
- android - 如何让我的应用在华为设备上受到保护