これを行うには、いくつかの方法が考えられます。
instanceof
1) ;を使用して、さまざまな種類の例外を区別できます。例えば
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
}
(最後のオプションは、間違いなく「通常の制御フローに例外を使用する」です...しかし、他のオプションと同等のパフォーマンスが必要だと思います。例外を使用するコストの大部分は、例外インスタンスの作成で発生します。以前に作成された例外を再スローします。)