2012-02-06 7 views
0

最近、定型的な例外を使用しないようにするための別の質問がありました(特に、エラーが発生した場合にアプリケーションが生き残れないため最初は)。私は大部分の状況で、可読性の容易さのために、チェックされていないエラーに賛成してスイングすることに決めました。他の状況では、私は大きな、醜いtryキャッチブロックを使用する以外に選択肢がないようです。"制限付き"コードからの例外の処理

たとえば、ある状況では、イントロスペクションを使用して不明な型のオブジェクト内のメソッドを呼び出すために、BeanUtilitiesクラスMethodUtilsを使用しています。この状況では、どのように私が制御できないクラスを使っているかを見ています。私は、チェックされた例外の哲学と一緒に行くことを余儀なくされ、私はメソッドを使用するたびに3つの異なる例外をキャッチですか?または、これを回避する方法はありますか?

SQL sql = null; 
try { 
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null); 
} catch (NoSuchMethodException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 

答えて

0

メルセンヌの答えに加えて、あなたは、単にあなたのcatchブロックでこれらの例外の共通の基底クラスを使用することができます。

SQL sql = null; 
try { 
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

これは、3つすべてをキャッチします例外。さまざまな例外に対して特定の手段を実行する予定がない場合は、これが適切な解決策です。それはすべてのJDKバージョンで動作します。

2

コンプレックスcatch可読性が非常に共通の問題です。 Javaの7ではそれがより読みやすい形式で次のようになります。

SQL sql = null; 
try { 
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null); 
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { 
    e.printStackTrace(); 
}