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
语句在扩展枚举但尚未实现新值的行为时仍然有其优点。