为什么无法使用&#34的错误进行编译; case表达式必须是常量表达式"?不是null
一个常量(在编译时已知)?
像null
一样明确地将case ((String)null)
值转换为String也没有帮助(我得到相同的错误)。
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;
}
答案 0 :(得分:8)
是的,案例表达式必须是常量表达式,但JLS, Section 14.11明确禁止<p><button class="btn btn-warning btn-block" ng-click="getDistance = 3">Show less than 3kms</button></p>
|omit:'distance > getDistance'
,它描述了null
语句:
给定一个switch语句,以下所有内容必须为true或发生编译时错误:
与switch语句关联的每个case常量必须与switch语句的Expression(第5.2节)的类型兼容。
如果switch语句的Expression类型是枚举类型,那么与switch语句关联的每个case常量都必须是该类型的枚举常量。
与switch语句关联的两个case常量中没有两个具有相同的值。
没有与switch语句关联的case常量为null 。
最多一个默认标签与switch语句关联。
(斜体字强调我的)
作为解决方法,您可以在switch
声明之外测试null
。
答案 1 :(得分:-1)
如果传递空值,switch语句将抛出NullPointerException
。使用separate test to check for null values.