MST

星途 面试题库

面试题:Java中如何在switch语句里有效使用枚举类型

请说明在Java中,将枚举类型与switch语句结合使用的基本语法,并举例说明如何根据不同的枚举值执行不同的业务逻辑。同时指出在这种结合使用中需要注意哪些常见问题。
19.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

基本语法

在Java中,将枚举类型与switch语句结合使用时,switch的表达式值为枚举类型,case后面直接跟枚举常量,无需使用枚举类名限定。语法示例如下:

enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumSwitchExample {
    public static void main(String[] args) {
        Weekday day = Weekday.MONDAY;
        switch (day) {
            case MONDAY:
                System.out.println("Today is Monday, start of the workweek.");
                break;
            case TUESDAY:
                System.out.println("Today is Tuesday, still in the workweek.");
                break;
            case WEDNESDAY:
                System.out.println("Today is Wednesday, mid - week.");
                break;
            case THURSDAY:
                System.out.println("Today is Thursday, almost the weekend.");
                break;
            case FRIDAY:
                System.out.println("Today is Friday, end of the workweek.");
                break;
            case SATURDAY:
                System.out.println("Today is Saturday, weekend time.");
                break;
            case SUNDAY:
                System.out.println("Today is Sunday, enjoy the rest.");
                break;
            default:
                System.out.println("Invalid day.");
        }
    }
}

根据不同枚举值执行不同业务逻辑

如上述示例,根据day的不同枚举值,打印不同的描述信息,这就是执行不同的业务逻辑。在实际应用中,case分支内可以执行各种复杂的业务代码,比如调用不同的服务方法、进行不同的数据处理等。

常见问题

  1. 枚举常量匹配case后的枚举常量必须是枚举类型中定义的,否则会编译错误。例如,若在上述代码中case写成case MONDAYYY,就会编译不通过。
  2. 遗漏break:和普通switch语句一样,如果在case分支中遗漏break语句,程序会继续执行下一个case分支的代码,可能导致不符合预期的结果。例如,若MONDAY分支没有break,当dayMONDAY时,不仅会执行MONDAY分支的代码,还会执行TUESDAY分支的代码。
  3. default分支:虽然switch语句与枚举类型结合时,default分支不是必需的,但建议加上,以处理可能出现的未预期情况,增强程序的健壮性。例如,如果枚举类型后续扩展了新的常量,有default分支可以避免程序在新常量出现时出现未处理情况。