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