Kotlin学习_when需写全case条件

在使用when表达式多个case符合条件的时候,需要注意将判断写全。

使用Kotlin的when表达式来判断多个case符合条件,换成Java就是

1
2
3
4
5
switch(x) {
case 1:
case 2:
break;
}

这里遇到一个坑,有一个方法:

1
2
3
4
5
6
7
8
9
fun check(value: Any?): String = when (value) {
is Int, Float, Double -> {
if (value == 0) "value为0"
else "value = $value"
}
else -> {
"value为空"
}
}

这个方法是用来判断输入的值,如果是IntFloatDouble类型的话就判断是否为0,如果不是的就返回字符串value为空。

1
2
3
4
5
6
fun main(args: Array<String>) {
println(check(1))
println(check(11f))
println(check(8.01))
println(check(0))
}

打印结果为

….居然是这样,跟我想的完全不一样,为什么会这样呢,看一下编译后的代码:

发现原因没有,只有Int类型的才有加instanceof判断,而另外两个却没有,那么得为FloatDouble也加上is判断才行。

1
2
3
4
5
6
7
8
9
fun check(value: Any?): String = when (value) {
is Int, is Float, is Double -> {
if (value == 0) "value为0"
else "value = $value"
}
else -> {
"value为空"
}
}

再来看看编译后的代码:

还有打印的结果: