2011-07-09 9 views
4

3種類の例外をスローするコードがあります。これらの例外のうち2つは特定の方法で処理され、3つ目は別の方法で処理されます。この方法でカットアンドペーストしないという良いイディオムはありますか?私がやりたい何同じ振る舞いでキャッチを管理する方法

は次のとおりです。

try { anObject.dangerousMethod(); } 
catch {AException OR BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 

答えて

2

のJava 6がこのようcatchブロックの指定をサポートしていません。あなたの最善の策は、これら2つの例外タイプのスーパークラス/インタフェースを定義し、スーパークラス/インタフェースをキャッチすることです。別の簡単な解決法は、これらの2つの例外を処理し、そのメソッドを2つのcatchブロックで呼び出すためのロジックを含むメソッドを持つことです。

3

新しいJava 7仕様で定義されているようになりました。

try { anObject.dangerousMethod(); } 
catch {AException | BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
4

in JDK 7がありますが、以前のJavaバージョンではありません。その後、あなたのコードでそれを使用し、AExceptionBExceptionの両方を拡張している(のがDExceptionを言わせて)カスタム例外の定義について

try { anObject.dangerousMethod(); } 
catch {AException | BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
0

方法:JDK 7で、あなたのコードは次のようになります

try { anObject.dangerousMethod(); } 
catch {DException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
+0

のErr、私は 'AException'と' BException'の両方が拡張する 'DException'を意味すると思います。 –

+0

@Sanjayはい、そうです –

関連する問題