2012-04-28 18 views
2

私はシステムxの通知を枯渇させる唯一の目的のために作成されたクラスを持っています。 システムxで操作を実行すると、n回の例外が生成されることがあります。これらの例外をすべて格納するために、私の通知クラスに ArrayListを作成しました。私は後でその リストを反復して、さまざまなタイプの例外をチェックしたいと考えています。例えば。私は反復して、 sqlConnectionの例外が発生したかどうかを確認してから、SQLクエリなどの次の例外を探します。java例外arraylist反復

これはどのように達成できますか?あなたはinstanceofを使用して例外の種類を判別することができる)

1;:私はこれを行うにはいくつかの方法を考えることができ

if exception for sqlconnection was found 
    exceptionMessage += "Connection Failed"; 
if exception for whatever was found 
    exceptionMessage += "whatever exception" 

etc... 

おかげで、

+1

したがって、 'if(exception instanceof SQLException)handleSQLException(); (例外instanceof IOException)handleIOException(); 'といいが、きれいな方法で –

+0

@ LuigiMendozaはいください:) –

答えて

2

:アイデアは、このようなものです例えば

if (e instanceof Exception) { 
    if (e instanceof IOException) { 
     if (e instanceof FileNotFoundException) { 
      ... 
     } else ... 
    } else ... 
} else ... 

2)マップを使用すると区別できます。例えば

Map <Class, Integer> map = new HashMap<Class, Integer>(); 
map.put(FileNotFoundException.class, 1); 
map.put(NullPointerException.class, 2); 
... 

Integer action = map.get(ex.getClass()); 
if (action != null) { 
    switch(action) { 
    case 1: 
     .... 
    case 2: 
     ... 
    } 
} 

3)Java 7では、例外クラスの名前を切り替えることで区別できます。

4)Java 7(または、以前のJavaバージョン... '|'はJava 7-ismですが)例外をスローしてtry {} catchを使用して区別することができます。

Throwable ex = ... 
try { 
    throw ex; 
} catch (IOException | InvalidArgumentException e) { 
    ... 
} catch (NullPointerException e) { 
    ... 
} catch (Throwable e) { 
    // catch all 
} 

(最後のオプションは、「通常の制御フローの例外を使用して」間違いなくある...しかし、私はそれが他のオプションに匹敵する性能を持つべきであると信じています。例外を使用してのコストの大部分は中に発生しています例外インスタンスを作成していますが、これは実行していません。前に作成した例外を再利用しています)。

+0

私はすでに最初のアプローチを使用し、それが働いた。最初の返事がinstanceofを使うようになったとき、私はそうしました。私のアイデアが有効であることを確認して返信します。ありがとう:) –

関連する問題