Java枚举类可直接用于switch语句,语法简洁、类型安全,编译器支持完整性检查;需用枚举常量名(如PENDING)作case分支,不可用字符串或数字替代,建议配合default抛IllegalStateException以暴露遗漏。

Java 中枚举类可以直接在 switch 语句中使用,语法简洁、类型安全,且编译器会做完整性检查(配合 default 可避免遗漏)。
枚举定义与 switch 基本用法
先定义一个枚举类,例如表示订单状态:
enum OrderStatus {
PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED
}
然后在 switch 中直接用枚举变量作为条件表达式:
OrderStatus status = OrderStatus.SHIPPED;
switch (status) {
case PENDING:
System.out.println("等待确认");
break;
case CONFIRMED:
System.out.println("已确认");
break;
case SHIPPED:
System.out.println("已发货");
break;
case DELIVERED:
System.out.println("已送达");
break;
case CANCELLED:
System.out.println("已取消");
break;
default:
throw new IllegalStateException("未知状态: " + status);
}
注意:每个 case 后面写的是枚举常量名(如 PENDING),不加类名前缀,也不加括号。
立即学习“Java免费学习笔记(深入)”;
无需 import 即可使用,但需确保作用域可见
只要枚举类型对当前代码可见(同包、已 import 或全限定名),就能在 switch 中使用。常见写法有:
- 同文件内定义枚举,直接使用
- 不同文件时,用
import com.example.OrderStatus; - 或用全限定名:
switch (OrderStatus.PENDING) { ... }(不推荐,仅用于临时调试)
编译器会检查是否覆盖全部枚举值(配合 default)
如果漏掉某个枚举常量,又没写 default,编译不会报错;但加上 default 并抛异常,能在运行时快速暴露逻辑缺失:
- 开发阶段建议保留
default分支并抛IllegalStateException - 若未来新增枚举值(如
REFUNDED),运行到该分支就会立即失败,提醒你补全逻辑 - IDE(如 IntelliJ)通常会提示“Missing enum constant in switch”警告
不能用字符串或数字代替枚举常量
以下写法是错误的:
-
case "PENDING":→ 编译失败,case必须是同一枚举类型的常量 -
case 0:→ 不合法,枚举不是整数,即使底层用 int 实现也不能这样用 -
case OrderStatus.PENDING.toString():→ 类型不匹配,toString()返回String
必须严格使用枚举类中声明的常量标识符。


















