右箭头 -> 是 Java 14 引入的 switch 表达式 的新语法,它是现代 Java 中 switch 语句的更简洁、更强大的写法。
传统 switch 语句 vs 新的 switch 表达式
传统 switch 语句(Java 13 及之前)
#java
// 传统写法 - 需要 break,容易遗漏导致穿透
public static Vehicle createVehicle(String type) {
Vehicle vehicle; //当前包级别访问权限。
switch (type.toLowerCase()) {
case "car":
vehicle = new Car();
break; // 必须要有 break
case "bike":
vehicle = new Bike();
break; // 必须要有 break
case "truck":
vehicle = new Truck();
break; // 必须要有 break
default:
throw new IllegalArgumentException("未知的车辆类型: " + type);
}
return vehicle;
}
#新的 switch 表达式(Java 14+)
#java
// 新写法 - 使用 -> 箭头语法
public static Vehicle createVehicle(String type) {
return switch (type.toLowerCase()) {
case "car" -> new Car();
case "bike" -> new Bike();
case "truck" -> new Truck();
default -> throw new IllegalArgumentException("未知的车辆类型: " + type);
};
}
箭头语法 -> 的特点
1. 自动返回,不需要 break
#java
int day = 3;
String dayType = switch (day) {
case 1, 2, 3, 4, 5 -> "工作日"; // 执行右边表达式后自动返回,不会穿透
case 6, 7 -> "周末";
default -> "无效天数";
};
System.out.println(dayType); // 输出: 工作日
2. 支持多行代码块
#java
String result = switch (value) {
case 1 -> "一";
case 2 -> {
System.out.println("处理数字 2");
yield "二"; // 在代码块中使用 yield 返回值
}
case 3 -> {
String message = "这是数字三";
yield message.toUpperCase();
}
default -> "其他";
};
3. 支持表达式返回值
#java
// switch 表达式可以直接返回值
int num = 2;
String numberWord = switch (num) {
case 1 -> "one";
case 2 -> "two"; // 这个表达式的结果就是返回值
case 3 -> "three";
default -> "many";
};
System.out.println(numberWord); // 输出: two
#完整的 switch 表达式特性
1. 多个 case 标签
#java
String season = switch (month) {
case 12, 1, 2 -> "冬季";
case 3, 4, 5 -> "春季";
case 6, 7, 8 -> "夏季";
case 9, 10, 11 -> "秋季";
default -> "无效月份";
};
2. 类型匹配(Java 21+ 预览特性)
#java
// Java 21 的模式匹配(预览特性)
Object obj = "Hello";
String result = switch (obj) {
case Integer i -> "整数: " + i;
case String s -> "字符串: " + s;
case Double d -> "小数: " + d;
case null -> "空值";
default -> "其他类型";
};
3. 守卫条件(Guard conditions)
#java
String response = switch (httpStatus) {
case 200 -> "成功";
case 404 -> "未找到";
case 500 -> "服务器错误";
case int code when code >= 400 && code < 500 -> "客户端错误";
case int code when code >= 500 && code < 600 -> "服务器错误";
default -> "未知状态";
};
#实际应用示例
#示例 1:计算器操作
#java
public class Calculator {
public static int calculate(int a, int b, String operator) {
return switch (operator) {
case "+" -> a + b;
case "-" -> a - b;
case "*" -> a * b;
case "/" -> {
if (b == 0) {
throw new ArithmeticException("除数不能为零");
}
yield a / b;
}
case "%" -> a % b;
default -> throw new IllegalArgumentException("不支持的操作符: " + operator);
};
}
public static void main(String[] args) {
System.out.println(calculate(10, 2, "+")); // 12
System.out.println(calculate(10, 2, "/")); // 5
}
}
#示例 2:工作日判断
#java
public class WorkdayChecker {
public static String getDayInfo(String day) {
return switch (day.toLowerCase()) {
case "monday", "tuesday", "wednesday", "thursday" -> {
String message = day + " 是工作日";
yield message + ",需要努力工作!";
}
case "friday" -> "周五,马上周末了!";
case "saturday", "sunday" -> "周末,好好休息!";
default -> "无效的星期几";
};
}
public static void main(String[] args) {
System.out.println(getDayInfo("Monday")); // Monday 是工作日,需要努力工作!
System.out.println(getDayInfo("Friday")); // 周五,马上周末了!
System.out.println(getDayInfo("Saturday")); // 周末,好好休息!
}
}
# 3:HTTP 状态码处理
#java
public class HttpStatusHandler {
public static String handleStatus(int statusCode) {
return switch (statusCode) {
case 200, 201, 204 -> "成功";
case 400 -> "错误请求";
case 401 -> "未授权";
case 403 -> "禁止访问";
case 404 -> "未找到";
case 500 -> "内部服务器错误";
case 503 -> "服务不可用";
case int code when code >= 100 && code < 200 -> "信息响应";
case int code when code >= 300 && code < 400 -> "重定向";
default -> "未知状态码";
};
}
}
#与传统 switch 的对比总结
特性 |传统 switch 语句 |新的 switch 表达式
语法 |case value: + break |case value -> expression
返回值 |不能直接返回值 |可以直接返回值
穿透 |会穿透,需要 break |不会穿透,自动跳出
代码块 |使用冒号和 break |使用 -> { } 和 yield
空安全 |不支持 |支持 case null 处理
模式匹配 |不支持 |Java 21+ 支持模式匹配
#版本要求
Java 14:switch 表达式作为正式特性引入
Java 17:长期支持版本,推荐使用
Java 21:增加了模式匹配等增强功能
#最佳实践
优先使用箭头语法:新的语法更安全、更简洁
处理所有情况:确保有 default 分支或覆盖所有可能值
保持简洁:如果逻辑复杂,考虑提取到独立方法中
利用类型检查:switch 表达式是类型安全的
#java
// ✅ 推荐写法
return switch (value) {
case "A" -> handleCaseA();
case "B" -> handleCaseB();
default -> handleDefault();
};
// ❌ 避免过于复杂
return switch (value) {
case "A" -> {
// 这里包含大量业务逻辑...
yield result;
}
// ... 其他case也包含大量逻辑
};
总结: 右箭头 -> 是 Java 14+ 中 switch 表达式的新语法,它使代码更简洁、更安全,是现代 Java 开发推荐使用的写法。
switch 右箭头用法
最新推荐文章于 2025-11-03 09:13:29 发布
1061

被折叠的 条评论
为什么被折叠?



