0

我们正在尝试使用 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 对象。

问题是当解析器遇到一个我们忽略它的标签时会抛出异常。

4

1 回答 1

0

抛出异常是因为您自己的代码调用 MyEnum.valueOf 的参数不能保证是枚举常量的名称。

因为你想忽略异常,所以最好不要抛出异常。例如,可以通过将以下方法添加到 MyEnum 来完成:

public static boolean isOneOfTheValues(String val) {
    for (MyEnum m: values()) {
        if (m.name().equals(val)) {
            return true;
        }
    }
    return false;
}

如果已知它是未知值,则根本不进入 switch 语句:

if (!MyEnum.isOneOfTheValues(s)) {
    return;
}
switch(MyEnum.valueOf(qNam))

如果枚举包含许多常量,则使用重建集而不是迭代 values() 的返回值可以提供更好的性能。

于 2012-08-14T09:23:22.270 回答