Java-无效的枚举值在开关块中不属于默认值

Java-无效的枚举值在开关块中不属于默认值,java,enums,Java,Enums,我在config.properties中输入了无效值: # Browser: CHROME, CHROME_NOHEAD, FF32, FF32_NOHEAD, FF64, FF64_NOHEAD # EDGE, IE32, IE64 browser=oPerA 我使用默认子句设置开关: public class ServiceHook { public enum Browser { CHROME, CHROME_NOHEAD, FF32, FF32_NOHEAD, F

我在
config.properties
中输入了无效值:

# Browser: CHROME, CHROME_NOHEAD, FF32, FF32_NOHEAD, FF64, FF64_NOHEAD
# EDGE, IE32, IE64
browser=oPerA
我使用默认子句设置开关:

public class ServiceHook {
    public enum Browser {
        CHROME, CHROME_NOHEAD, FF32, FF32_NOHEAD, FF64, FF64_NOHEAD, EDGE, IE32, IE64
    }

    public void setUp() throws Throwable {
        String browserConfig = Configuration.readKey("browser"); // Reads the String from the config file
        Browser browser = Browser.valueOf(browserConfig.toUpperCase());

        switch (browser) {
        case CHROME:
            // Do something for each case
            break;
        case CHROME_NOHEAD: break;
        case FF32: break;
        case FF32_NOHEAD: break;
        case FF64: break;
        case FF64_NOHEAD: break;
        case EDGE: break;
        case IE32: break;
        case IE64: break;
        default:
            // Do something for unsupported browser
            break;
        }
    }
}
然而,我得到了以下例外:

java.lang.IllegalArgumentException:无枚举常量 jcucumberng.steps.defs.ServiceHook.Browser.OPERA


有什么建议说明它为什么不触发default子句吗?

代码没有那么远


这是
Browser=Browser.valueOf(browserConfig.toUpperCase())。您必须将其放入try-catch块以处理无效值。
Browser=Browser.valueOf(browserConfig.toUpperCase())中的问题(第7行),
So


在此行“Browser.valueOf(browserConfig.toUpperCase());”上调试语句以查看到底发生了什么(请查看浏览器中的值)

,因为它会在切换之前触发一个
非法argumentException
。查看堆栈跟踪和Javadoc。问题在于这里
Browser Browser=Browser.valueOf(browserConfig.toUpperCase()),不在交换机中。谢谢!还添加了一个if检查,以确保切换前
浏览器
不为空。虽然default子句已经失去了它的作用。@silver不是真的,
default
语句在扩展枚举但尚未实现新值的行为时仍然有其优点。