在 Java 12 中,switch 语句得到了显著的改进,主要是通过引入 switch 表达式,使得代码更加简洁和易于维护。这些改动提高了语言的灵活性,并且为开发者提供了新的方式来处理分支逻辑。
传统的 switch 语句
在 Java 12 之前,switch 语句只能用作一种控制结构,用于根据一个表达式的值来选择执行多个代码块中的一个。它有几个限制,比如:
-
必须使用 break 语句来防止“贯穿”(fall-through)。
-
语法相对冗长,尤其是在需要处理多个分支逻辑时。
示例:
int num;
switch (day) {
case "MONDAY":
num = 1;
break;
case "TUESDAY":
num = 2;
break;
case "WEDNESDAY":
num = 3;
break;
case "THURSDAY":
num = 4;
break;
case "FRIDAY":
num = 5;
break;
case "SATURDAY":
num = 6;
break;
case "SUNDAY":
num = 7;
break;
default:
throw new IllegalStateException("Invalid day: " + day);
}
Java 12 的 switch 表达式
Java 12 引入了 switch 表达式作为预览特性,它可以用作一种表达式,返回一个值,并且可以显著简化代码。主要的改动包括:
- 返回值:switch 表达式可以返回一个值,这个值可以直接赋给一个变量。
- 简化语法:可以使用 -> 符号来简化 case 标签后的代码,不需要显式的 break 语句。
- 减少冗余:不需要显式的 break,避免了传统 switch 语句中的“贯穿”问题。
示例:
int num = switch (day) {
case "MONDAY" -> 1;
case "TUESDAY" -> 2;
case "WEDNESDAY" -> 3;
case "THURSDAY" -> 4;
case "FRIDAY" -> 5;
case "SATURDAY" -> 6;
case "SUNDAY" -> 7;
default -> throw new IllegalStateException("Invalid day: " + day);
};
主要特点
- 返回值:switch 表达式可以返回一个值,使得 switch 语句可以用在表达式的上下文中,比如在变量赋值或者返回值的情况下。
int result = switch (value) {
case 1 -> 10;
case 2 -> 20;
default -> 0;
};
- 多值 case 标签:case 标签可以匹配多个值,减少了重复代码。
String result = switch (value) {
case 1, 2, 3 -> "One, Two, or Three";
case 4 -> "Four";
default -> "Other";
};
- 更灵活的控制流:支持多行语句块和更复杂的逻辑操作,可以使用 {} 块来包含多行语句。
int result = switch (value) {
case 1, 2, 3 -> {
int temp = value * 10;
yield temp; // 需要使用 yield 返回值,不能用return
}
default -> 0;
};
- 支持复杂的表达式:switch 表达式允许复杂的表达式和操作。
String dayType = switch (day) {
case "SATURDAY", "SUNDAY" -> "Weekend";
default -> {
String result = "Weekday";
if (day.equals("FRIDAY")) {
result = "Almost Weekend";
}
yield result; // 返回值
}
};
总结
Java 12 中的 switch 表达式为开发者提供了一个强大的工具,简化了代码结构,减少了冗长和重复,使得条件分支的处理变得更加简洁和高效。这一改进不仅提升了代码的可读性和可维护性,还为开发者带来了更多的灵活性,能够更轻松地应对复杂的条件判断和分支逻辑。
网友评论