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,我们可以编写更加简洁和清晰的逻辑。