带有详尽列表的switch语句:默认标签是否相关?

sp0*_*00m 0 java switch-statement

当使用switch语句时,有可用项目的详尽列表(例如a enum),并且如果每个项目都有自己的条件代码,我应该使用default标签吗?例如:

public class MyClass {

    public enum Type {
        TYPE1, TYPE2
    }

    private Type type;

    public void withDefault() {
        switch (type) {
        case TYPE1:
            // some conditional code for TYPE1
            break;
        default:
            // some conditional code for TYPE2
            break;
        }
    }

    public void withoutDefault() {
        switch (type) {
        case TYPE1:
            // some conditional code for TYPE1
            break;
        case TYPE2:
            // some conditional code for TYPE2
            break;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我应该使用什么:withDefault()方法还是方法withoutDefault()?或者也许只是品味问题?

Ski*_*ead 11

我通常为每个TYPE1和TYPE2使用一个case,然后是一个抛出异常的默认值,这样稍后当添加一个类型时,异常将提醒我更改开关.

  • 如果您没有默认的TYPE1和TYPE2的情况,并且您添加了一个新类型,那么如果您使用像Eclipse这样的IDE,它会警告您在编译时错过了案例标签 - 这可能比在运行时.显然,这假设您不会忽略警告. (3认同)