2011-12-22 9 views
0

これは私のシナリオですが、私は別の階層からのような任意の例外が含まれている、と怒鳴るコードスナップが、私はそう比較例外

private List<java.lang.Class> connectionExceptions; 
try { 

// trying to connect to external module; 

} catch(Exception e) { 
    // Need to compare this exception e with a list of exceptions which I have, 
    // and the action depends on the results. There may be some other exception 
    // which are not in the list. 
} 

を行うために必要なものを説明します、どのように私は比較することができますの例外のリストを持っています例外がリストや他のものに含まれている場合は、何らかのアクションが必要です。

私が知っているコントロールの流れは例外ではありません。しかし、私はそれを行う必要があります。

+0

「リスト」を使用できないのはなぜですか? – KrishPrabakar

答えて

2

複数のブロックをそれぞれ特定の例外のみを捕捉することができます。

... 
catch(SomeException e) { 
    //do something 
} 
catch(SomeOtherException e) { 
    //do something else 
} 

または、実際に例外がリストにあるかどうかを確認するには、connectionExceptions.contains(e.getClass())を使用してください。

+0

異なる階層からの例外を持つリストの場合はどうなりますか? –

+0

それはどういう意味ですか? – tobiasbayer

1
if (connectionExceptions.contains(e) { 
    // 
} 

これは、リストを動的にする必要がある場合です。そうでなければ使用:

Java7で
} catch (FooException) { 

} catch (BarException) { 

} 

またはマルチキャッチ:

} catch (FirstException | SecondException ex) { 
+0

おっと、はい。修正する。私はそれが実際に 'クラス'であることを期待しています。それはもっと意味があります。 – Bozho

+0

@Bozho:私はその質問を更新しました。 –

+0

'Exception'は適切なオーバーライドされた' equals() 'メソッドを持たないので、アイデンティティ比較(' == ')を使うスーパークラス' Object'のequalsを使うようになります。 – KrishPrabakar

-1

Abimaran、あなたの質問には、「(tryブロックでスロー)例外はあなたのリストにあるかどうか確認してください」です。だから、これを確認するために、メカニズムをチェックすることは非常にまっすぐ進むことや、詳細な、私は意味、

  • は、リスト、地図や詳細(のような 場合POSS胆汁、タイプ、クラスなどの各例外の任意のものを維持する必要があります
  • catchブロックで例外をチェックするときは、Java汎用クラスによって提供される 関数のいくつかを使用してください。

これは、このシナリオで可能な最良の方法です。

2

Exceptionクラスは等号を使用しているため()Objectクラスの機能、connectionExceptions.contains(e)は異なるデフォルトHEXの同一性を有するであろうと同じ原因とスタックトレースを保有する各例外eインスタンスとして正しい答えを得られません。しかし、2つの例外を比較したい場合はArrays.deepEquals(Object, Object)を使用できます。

catch (Exception e) { 
    boolean sameException = false; 
    for (Exception ee : connectionExceptions) { 
    sameException = Arrays.deepEquals(e.getStackTrace(), ee.getStackTrace()); 
    if (sameException) { 
     break; //exception matched 
    } 
    } 
} 
+0

'Arrays.deepEquals()'が 'Arrays 'より優先されるべきであるという説明をいくつか提供してください。equals() ' – coolguy

0

Peter Knegoは、このanswerで例外を比較する方法を説明しています。

基本的には、instanceofを使用して比較することができます。

for (java.lang.Class exception : connectionExceptions) { 
    if (e instanceof exception) { 
     // DO YOUR THING 
     break; 
    } 
} 
関連する問題