为什么Java在完全覆盖的枚举之后需要一个死的返回语句?

Jas*_*son 2 java enums switch-statement

即使不可能通过switch语句,我仍然需要包含一个return语句.枚举无法扩展,因此将来无法添加或删除其他值.

这是Java中的错误吗?如果没有,你知道为什么会这样吗?

这是一个看我的意思的例子:

public class Example{

    enum Day{
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    }

    public static String getType(Day day, boolean weekendOff){

        switch(day){
            case Monday:
            case Tuesday:
            case Wednesday:
            case Thursday:
                return "work day";
            case Friday:
            case Saturday:
            case Sunday:
                if (weekendOff){
                    return "party day";
                }
                else {
                    return "work day";
                }
        }

        //this is the line I don't understand
        return "";


    }

     public static void main(String []args){

         getType(Day.Monday, false);

     }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 10

因为将来可能会添加新的枚举元素.如果您的枚举使用类没有重新编译,那么您的代码将不再正确.这避免了这种可能性.

正如其他人所说的那样,只需添加一个default条款来处理这种情况,可能就是抛出一个AssertionError.