Java7-null作为大小写表达式

Java7-null作为大小写表达式,java,Java,为什么编译失败并出现case表达式必须是常量表达式的错误?null不是编译时已知的常量吗? 显式地将null值强制转换为String,以防Stringnull也没有帮助,我会得到相同的错误 public static String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOfDay; switch (dayOfWeekArg) { case null:

为什么编译失败并出现case表达式必须是常量表达式的错误?null不是编译时已知的常量吗? 显式地将null值强制转换为String,以防Stringnull也没有帮助,我会得到相同的错误

public static String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
    String typeOfDay;
    switch (dayOfWeekArg) {

        case null:
            typeOfDay = "NULL";
            break;

        case "Monday":
            typeOfDay = "Start of work week";
            break;
        case "Tuesday":
        case "Wednesday":
        case "Thursday":
            typeOfDay = "Midweek";
            break;
        case "Friday":
            typeOfDay = "End of work week";
            break;
        case "Saturday":
        case "Sunday":
            typeOfDay = "Weekend";
            break;
        default:
            throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
    }
    return typeOfDay;
}

是的,大小写表达式必须是常量表达式,但null被特别禁止,它描述了switch语句:

给定switch语句,以下所有条件都必须为true,否则会发生编译时错误:

与switch语句关联的每个case常量都必须与switch语句的表达式类型§5.2的赋值兼容

如果switch语句表达式的类型是枚举类型,则与switch语句关联的每个case常量都必须是该类型的枚举常量

与switch语句关联的case常量中没有两个具有相同的值

与switch语句关联的case常量均不为null

最多有一个默认标签与switch语句关联

斜体强调


作为一种解决方法,您可以在switch语句之外测试null。

如果您传递null值,switch语句将抛出NullPointerException。使用相关的:@BrunoParmentier链接也很有用。谢谢。我知道了,在JLS里。谢谢。它确实会抛出NPE,但我必须先编译它,例如删除case null语句。所以我觉得这也很相关。谢谢