2012-05-25 13 views
7

私は例外を拡張するクラスが発生しました:オーバーライドコンストラクタのすべてがちょうどスーパークラスの例外を呼び出しているので、Exceptionクラスを拡張する理由

public class MyException extends Exception 
{ 
    public MyException() 
    { 
     super(); 
    } 

    public MyException(final String argMessage, final Throwable argCause) 
    { 
     super(argMessage, argCause); 
    } 

    public MyException(final String argMessage) 
    { 
     super(argMessage); 
    } 

    public MyException(final Throwable argCause) 
    { 
     super(argCause); 
    } 


} 

が、それはこのよう無意味extening例外ではないですか?

+0

[Javaで例外をサブクラス化する:カスタムメッセージが "十分に良い"ではない場合は?](http://stackoverflow.com/questions/9366425/subclassing-exception -in-java-when-is-a-custom-message-good-enough) –

答えて

8

いいえ、それは無意味ではありません。特定の例外をこのようにしてcatchにすることができ、具体的に扱うことはできません。通常はExceptionを受け取りますが、すべてのケースで処理できない場合があります。これにより

、あなたが行うことができます:あなたは、一般的なExceptionを処理する方法がわからない、しかし、あなたがより良いMyExceptionを扱うことができるならば可能ではない

try { 
    foo(); 
} catch (MyException e) { 
    handleMyException(e); 
} 

を。

また、可読性が向上します。throws MyException(通常はより良い名前)、次にthrows Exceptionというようにメソッドを宣言することをお勧めします。

5

はい、理由はあります。例外の種類を区別することができます。

この次のコードとしますMyFirstExceptionMySecondExceptionはExceptionから継承し、すべてのメソッドをオーバーライドする場合

try { 
    // some instructions 
} catch (MyFirstException firstException) { 
    // Handler for the first exception 
} catch (MySecondException secondException) { 
    // Handler for the first exception 
} catch (Exception exception) { 
    // Handler for all other exceptions 
} 

イベントを、あなたは、catchブロックでそれらを区別することができます。したがって、両方の例外に対して異なるハンドラを持つことができます。

0

いつもcatch (Exception e)を実行すると、Exceptionの各サブクラスを実際に捕まえることになりますが、これは通常、捕まえたくないRuntimeExceptionにも当てはまります。これはキャッチするだけで悪化させることができますThrowable

関連する問題