0

は、私が取り組んできたプロジェクトのために、私たちはこのように見えるいくつかのブロックを持っています特定の「予想される」タイプの例外のみが含まれます。ジェネリック例外をより特定の例外タイプに置き換える?</p> <p>クラスA:</p> <pre><code>try { callSomeMethod(); } catch (Exception e) { throw new SomeCustomExceptionTypeForMetrics(""); } </code></pre> <p>しかし、私は、我々が持つ一般的な例外をキャッチするすべてのインスタンスを置き換えることを任務として

try { 
    if (someCondition...) { 

    } 
    else { 
     //failed 
     throw new RuntimeException("Timeout while waiting for results") 
    } 
} 
catch(InterruptedException e) { 
    // do some failure stuff here 
    throw new RuntimeException("Something here"); 
} 

は、理想的には、私のグループは、可能な限り少しように変更するために私を求めている、と私は変更することはできません。

問題がcallSomeMethod(ある)は、この

クラスBのようなものを持っていますcallSomeMethod()のシグネチャですが、クラスAのRuntimeExceptionもキャッチする必要はありません。クラスBから例外を除くすべてのタイプのRuntimeExceptionをキャッチしたくないからです。

これを処理する最善の方法は何ですか?カスタムExceptionクラスにメソッドにRuntimeException Sを変更し、クラスAに:

try { 
    callSomeMethod(); 
} 
catch (Exception e) { 
    if(e instanceof CustomException) 
     //Log it or something, for metrics? 
} 

これはあなたのcallSomeMethodの署名がthrows Exceptionが含まれており、あなたはそれを変更することはできませんとすると

+2

これらのRuntimeExeptionをより具体的なものに変更します。必要に応じてカスタムクラスを作成します。 –

+0

私はこれを正しく理解しましたか?RuntimeExceptionsをキャッチするはずですが、明示的にJavaコード内のクラスBで「新しいRuntimeException()」をスローして、別の場所からのものを無視してスローされた場合のみですか? –

+0

クラスBをオプションに変更していますか? – slambeth

答えて

0

愚かではありますが、メソッドのシグネチャを変更できない場合は必要になるかもしれません。 (変更可能な場合はCustomExceptionを直接捕まえることができます)。Exceptionを取得する方法をロガーで作成し、それがどのタイプであるかを確認してそれに応じて動作させることさえ可能です。次に、編集する必要があるすべてのcatchステートメントでこのメソッドを使用します。

このソリューションを設計する際には、RuntimeExceptionを捕まえる必要はありません。それはあなたにいくつかの問題を救うことができる。

0

あなたは

try { 
     if (someCondition...) { 

     } 
     else { 
      //failed 
      throw new MyRuntimeException("Timeout while waiting for results") 
     } 
    } 
    catch(InterruptedException e) { 
     // do some failure stuff here 
     throw new MyRuntimeException("Something here"); 
    } 

以下のようにクラスBでコードをchnageとしてMyRuntimeExceptionを定義する場合:クラスAで

class MyRuntimeException extends RuntimeException{ 
.. 
} 

、あなただけのMyRuntimeException例外をキャッチする必要があります。

これがあなたの問題を解決することを願っています!

関連する問題

 関連する問題