Java 7 - null作为case表达式

时间:2015-05-18 22:27:49

标签: java

为什么无法使用&#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;
}

2 个答案:

答案 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.