我们试图使用sax解析器解析xml文件,但在使用switch-in时遇到了问题:
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
switch(MyEnum.valueOf(qNam))
case tag1:
.......
break;
case tag2:
........
break;
case tag5:
..........
在每种情况下,我们都会填充一些pojo对象。
问题是,当解析器遇到我们忽略的标记时,它会引发异常。
由于您自己的代码调用MyEnum.valueOf的参数不能保证是枚举常量的名称,因此引发异常。
因为您想忽略Exception,所以最好不要抛出异常。例如,可以通过将以下方法添加到MyEnum来实现:
public static boolean isOneOfTheValues(String val) {
for (MyEnum m: values()) {
if (m.name().equals(val)) {
return true;
}
}
return false;
}
然后如果它是未知值,则根本不进入切换语句:
if (!MyEnum.isOneOfTheValues(s)) {
return;
}
switch(MyEnum.valueOf(qNam))
如果枚举包含许多常量,则使用重建集而不是迭代values()的返回值可以提供更好的性能。