Kotlin切换语句的替代方案

139 阅读2分钟

在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代码中,12 都会产生相同的结果:

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 错误。

你可以在这里了解更多关于when 关键字的信息。