在Kotlin中,没有像Java编程语言中那样的switch-case 语句。
相反,Kotlin用when 关键字代替了switch 语句。
考虑以下Java中的switch 语句:
int myInt = 2;
switch (myInt) {
case 1:
System.out.println("number is one");
break;
case 2:
System.out.println("number is two");
break;
default:
System.out.println("number is unknown");
}
上面的代码等同于下面的Kotlin代码:
var myInt = 2
when (myInt) {
1 -> println("number is one")
2 -> println("number is two")
else -> println("number is unknown")
}
when 关键字给Java的老的switch 关键字带来了一些改进。
你不需要为每一种情况添加break 关键字,而且default 的情况被替换成else 的情况。
when 关键字还允许你为多个情况定义一个共同的结果。你只需要将产生相同结果的情况用逗号分开。
例如,下面的Java代码中,1 和2 都会产生相同的结果:
int myInt = 2;
switch (myInt) {
case 1:
case 2:
System.out.println("number is either one or two");
break;
default:
System.out.println("number is unknown");
}
上述代码的Kotlin等价物将如下所示:
var myInt = 2
when (myInt) {
1, 2 -> println("number is either one or two")
else -> println("number is unknown")
}
最后,when 关键字可以作为一个表达式或语句使用。
这意味着你可以将when 关键字的结果分配到一个变量中,如下所示:
var myInt = 2
var myString = when (myInt) {
1, 2 -> "number is either one or two"
else -> "number is unknown"
}
print(myString) // number is either one or two
在Java中,switch 关键字的使用仅限于一个语句或作为一个函数的返回值。
要给变量赋值,你需要创建一个变通方法,如下所示:
String myString;
switch (myInt) {
case 1:
case 2:
myString = "number is either one or two";
break;
default:
myString = "number is unknown";
break;
}
System.out.println(myString);
在Java JDK 12中,对switch 关键字进行了改进,允许你把它作为一个表达式使用,如下图所示:
int myInt = 2;
var myString = switch (myInt) {
case 1, 2 -> "number is either one or two";
default ->"number is unknown";
};
System.out.println(myString);
但是,由于Android Studio默认使用JDK 11,在Android应用程序中使用上述代码很可能会产生illegal start of expression 错误。