2

システムxの通知を処理することのみを目的として作成されたクラスがあります。これで、システムxで操作を実行しているときに、n個の例外が生成される可能性があります。これらすべての例外を格納するために、通知クラスにArrayListを作成しました。後でそのリストを繰り返し処理して、さまざまなタイプの例外をチェックしたいと思います。たとえば、sqlConnectionの例外が発生したかどうかを繰り返して確認し、次の例外(SQLクエリなど)を確認したいとします。

これはどのように達成できますか?アイデアは次のようなものです。

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

etc...

ありがとう、

4

1 に答える 1

2

これを行うには、いくつかの方法が考えられます。

instanceof1) ;を使用して、さまざまな種類の例外を区別できます。例えば

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
}

(最後のオプションは、間違いなく「通常の制御フローに例外を使用する」です...しかし、他のオプションと同等のパフォーマンスが必要だと思います。例外を使用するコストの大部分は、例外インスタンスの作成で発生します。以前に作成された例外を再スローします。)

于 2012-04-28T06:32:42.910 に答える