私は次のインターフェースを持っています:
public interface ICalculationRule {
public void calculate(EventBag eventBag);
}
計算が失敗したかどうかを示す方法を提供したいのですが、もっと正しいのは何ですか?
throws Exception
メソッドシグネチャに追加- make
calculate
メソッドboolean
(true
=成功、false
-失敗)
私は次のインターフェースを持っています:
public interface ICalculationRule {
public void calculate(EventBag eventBag);
}
計算が失敗したかどうかを示す方法を提供したいのですが、もっと正しいのは何ですか?
throws Exception
メソッドシグネチャに追加calculate
メソッド boolean
(true
=成功、false
-失敗)それはすべてに依存します
" Is the error is expected or unexpected ? "
計算中に予期しないことが発生した場合。例外をスローすることを想定しています。使用中に処理されることになっている場合は、catchを試してください。メソッドの呼び出し元がそれに反応すると想定されている場合。次に、スロー例外を追加します。
結果NOが発生すると予想されるものであり、エラー状態がそれほど重要ではなく、呼び出し元が成功または失敗の結果を知ることに関心がある場合。頑張れ。
また、一般的な例外には行かないでください。ただし、具体的にしてください。
また、成功または失敗について発信者に通知するための代理人を作成することも考えられます。
public interface Response {
public void onSuccess();
public void onFailure(Exception exception);
}
呼び出し元と計算メソッド呼び出しでその実装オブジェクトを探すことができます。そして、成功または失敗すると、次のようなそれぞれのデリゲートを呼び出すことができます
public void calculation(Response response) {
Exception e = null;
try {
// Do something here
} catch (IOException ioe) {
e = ioe;
}
if(e == null) {
response.onSuccess();
} else {
response.onFailure(e);
}
}
これがあなたを正しい方向に導くことを願っています:)
例外には、単純なブール値の回答よりも多くの情報を処理できるという利点があります。必要なのがyes/noの答えだけの場合は、ブール値を返します。コードが少し簡潔になりますが、詳細が必要な場合は例外をスローします。
ただし、標準ではなく、独自の例外があることを確認してくださいjava.lang.Exception
。それは常にインターフェースが悪く、二重に悪いです。
RuntimeException
エラーと結果を継承するカスタマイズされた例外をスローしてみることができます。したがって、インターフェイスのクライアントは明示的にする必要はありません。これは、不要なtrycatchブロックを回避するのに役立ちます
ブール応答の代わりに、成功と失敗の両方をキャプチャするResultオブジェクトを送信してみて、呼び出し元と呼び出し先の間で情報を渡すためのコンテナーを取得することができます。
一般的に、論理プロシージャを処理するために例外を使用することはお勧めしません。例外は実際の例外として扱われる必要があり、必要な場合にのみ発生します。例外をスローするには、単に値を返すだけではなく、絶対に多くの時間がかかります。また、意味のある戻り値に正しくフラグを立てることは、将来、コードリーダーとアダプターにとってより理にかなっていると思います。ただし、これは避けられません。値を返すことによって処理が困難であることが示されている場合は、スロー例外を使用できます。
あなたの場合、次のオプションが正しい選択であるはずです。
make calculate method boolean (true=success, false - failure)
Exception
がスローされる可能性があることを宣言することは、それがクライアントコードによって処理される必要があることを示していることを理解することが重要です。これは、メソッドの作成者であるあなたが、単にそれを通過させることはできないことを意味します。
一方、計算の失敗がそれほど深刻ではなく、クライアントコードにとって問題である可能性があり、そうでない可能性がある場合は、boolean
指定したとおりに戻って、クライアントコードに特別な処理を適用するかどうかを決定させることができます。クライアントが単なる情報よりも多くの情報を必要としていると思われる場合は、boolean
いつでも何らかのCalculationResult
オブジェクトを返すことができます。