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 を呼び出すため、例外がスローされます。

Exception を無視したいので、例外をまったくスローしない方がよいでしょう。これは、たとえば次のメソッドを 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 に答える