2012-05-04 16 views
3

私はJavaの新機能を使用していますが、現在は割り当てられた評価を行っています。クラス関数内で例外をキャッチし、クラス関数を呼び出した関数が最初に投げられた例外について知る必要がないように別の例外をスローする方法があるかどうか疑問に思っています。例えば例外のキャッチと再呼び出し

public void foo() throws MasterException { 
    try { 
     int a = bar(); 
    } catch (MasterException e) { 
     //do stuff 
    } 
} 

public void bar() throws MasterException, MinorException { 
    try { 
     int a = 1; 
    } catch (MinorException e) { 
     throw new MasterException(); 
    } 
} 

私は、この例では、私が達成しようとしているかを説明願っています。基本的に私は呼び出す関数がMinorExceptionについて知らないことを望みます。

+4

それはそうです。 – Martin

+1

あなたはそれを試しましたか? – Jeffrey

+0

あなたが 'bar()'に 'MinorException'をスローしたこと以外は、これはあなたが求めているものを既に完成させたようです。 –

答えて

3

barの宣言から, MinorExceptionを削除すると完了です。 また、私はどうなる:

throw new MasterException(e); 

MasterException場合は、それをサポートするコンストラクタ(それがない、標準、やるExceptionクラス)を有していました。

+0

ありがとうございました。私はc/C++のバックグラウンドから来て、実際には例外を使用しませんでした。 – Benji

+0

例外は祝福と呪いであり、イモは主に呪い(チェック時)です。それらを再投げるこのコンセプトを把握することは、それらを「習得する」ステップのように見えます。 – esej

+0

さて、私は彼らがC++の呪いだと常に信じていました。 – Benji

1

絶対に。あなたは、この行を変更したい:これまで

public void bar() throws MasterException, MinorException 

public void bar() throws MasterException 

他のすべては、あなたがそれを書いたかを正確に動作するはずです。

1

bar()のthrows節からMinorExceptionを削除するだけです。

0

私はfoo()からそれをキャッチしているときにMasterExceptionを取り除き、他の答えはbar()からMinorExceptionを出します。

さらに、MasterExceptionまたはMinorExceptionがRuntimeExceptionのサブクラスである場合は、それを宣言する必要はありません。例えば、

+0

私はちょうど例であったこれらの例外を使用していない私の頭の上から例外の名前を作りました。 – Benji

関連する問題