在使用when
表达式多个case
符合条件的时候,需要注意将判断写全。
使用Kotlin的when
表达式来判断多个case
符合条件,换成Java就是1
2
3
4
5switch(x) {
case 1:
case 2:
break;
}
这里遇到一个坑,有一个方法:1
2
3
4
5
6
7
8
9fun check(value: Any?): String = when (value) {
is Int, Float, Double -> {
if (value == 0) "value为0"
else "value = $value"
}
else -> {
"value为空"
}
}
这个方法是用来判断输入的值,如果是Int
、Float
、Double
类型的话就判断是否为0,如果不是的就返回字符串value为空。1
2
3
4
5
6fun main(args: Array<String>) {
println(check(1))
println(check(11f))
println(check(8.01))
println(check(0))
}
打印结果为
….居然是这样,跟我想的完全不一样,为什么会这样呢,看一下编译后的代码:
发现原因没有,只有Int
类型的才有加instanceof
判断,而另外两个却没有,那么得为Float
和Double
也加上is
判断才行。1
2
3
4
5
6
7
8
9fun check(value: Any?): String = when (value) {
is Int, is Float, is Double -> {
if (value == 0) "value为0"
else "value = $value"
}
else -> {
"value为空"
}
}
再来看看编译后的代码:
还有打印的结果: