Java 13 引入了对 switch
表达式的增强功能,这使得我们可以编写更加简洁和清晰的代码。这些增强功能不仅提高了代码的可读性,还减少了常见的错误,例如在每个 case 后忘记使用 break
。
在传统的 switch
语句中,我们需要显式地使用 break
来避免“fall-through”问题(即不加 break
时会继续执行下一个 case
)。这种机制容易导致错误,尤其是在复杂的 switch
结构中。例如:
int day = 2;
String dayName;
switch (day) {
case 1:
dayName = "Monday";
case 2:
dayName = "Tuesday"; // 如果忘记 break,会导致错误
case 3:
dayName = "Wednesday";
break;
default:
dayName = "Unknown";
}
在这个例子中,如果我们在 case 1
或 case 2
后忘记添加 break
,程序可能会意外地将 dayName
设置为后续的值。
Java 13 提供了一种新的语法来解决这些问题。通过使用 ->
替代 :
,我们可以让每个 case
自动终止,而不需要显式地使用 break
。此外,switch
表达式还可以直接返回一个值。
int day = 2;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
default -> "Unknown";
};
System.out.println(dayName); // 输出: Tuesday
在这个例子中,每个 case
都使用了 ->
,并且表达式会自动返回对应的值。这种方式不仅更加简洁,而且避免了 break
忘记的问题。
如果某个 case
需要执行多条语句,可以使用大括号 {}
包裹这些语句,并且必须使用 return
明确返回值。例如:
int day = 4;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> {
System.out.println("Processing Thursday...");
yield "Thursday"; // 使用 yield 返回值
}
default -> "Unknown";
};
System.out.println(dayName); // 输出: Processing Thursday... Thursday
在这里,我们使用了 yield
关键字来返回值。yield
是专门为 switch
表达式设计的,用于替代 return
,并确保表达式能够正确返回值。
首先,创建一个新的 Java 文件,并确保你的 JDK 版本是 13 或更高。
public class SwitchExpressionExample {
public static void main(String[] args) {
int day = 5;
String dayName = getDayName(day);
System.out.println("The day is: " + dayName);
}
public static String getDayName(int day) {
return switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6 -> "Saturday";
case 7 -> "Sunday";
default -> "Invalid day";
};
}
}
确保你使用的是 JDK 13 或更高版本,然后编译并运行程序:
javac SwitchExpressionExample.java
java SwitchExpressionExample
输出结果应该是:
The day is: Friday
Java 13 的 switch
表达式增强功能极大地简化了代码结构,减少了潜在的错误,并提高了代码的可读性和维护性。通过使用 ->
和 yield
,我们可以编写更加简洁和清晰的逻辑。