0

私は次のインターフェースを持っています:

public interface ICalculationRule {
    public void calculate(EventBag eventBag);
}

計算が失敗したかどうかを示す方法を提供したいのですが、もっと正しいのは何ですか?

  • throws Exceptionメソッドシグネチャに追加
  • makecalculateメソッド booleantrue=成功、false-失敗)
4

5 に答える 5

2

それはすべてに依存します

 " Is the error is expected or unexpected ? "
  • メソッドシグネチャに例外をスローします

計算中に予期しないことが発生した場合。例外をスローすることを想定しています。使用中に処理されることになっている場合は、catchを試してください。メソッドの呼び出し元がそれに反応すると想定されている場合。次に、スロー例外を追加します。

  • 計算メソッドをブール値にします(true =成功、false-失敗)

結果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);
    }
}

これがあなたを正しい方向に導くことを願っています:)

于 2012-05-01T06:39:39.877 に答える
1

例外には、単純なブール値の回答よりも多くの情報を処理できるという利点があります。必要なのがyes/noの答えだけの場合は、ブール値を返します。コードが少し簡潔になりますが、詳細が必要な場合は例外をスローします。

ただし、標準ではなく、独自の例外があることを確認してくださいjava.lang.Exception。それは常にインターフェースが悪く、二重に悪いです。

于 2012-05-01T06:33:38.317 に答える
0
  1. RuntimeExceptionエラーと結果を継承するカスタマイズされた例外をスローしてみることができます。したがって、インターフェイスのクライアントは明示的にする必要はありません。これは、不要なtrycatchブロックを回避するのに役立ちます

  2. ブール応答の代わりに、成功と失敗の両方をキャプチャするResultオブジェクトを送信してみて、呼び出し元と呼び出し先の間で情報を渡すためのコンテナーを取得することができます。

于 2012-05-01T06:42:14.157 に答える
0

一般的に、論理プロシージャを処理するために例外を使用することはお勧めしません。例外は実際の例外として扱われる必要があり、必要な場合にのみ発生します。例外をスローするには、単に値を返すだけではなく、絶対に多くの時間がかかります。また、意味のある戻り値に正しくフラグを立てることは、将来、コードリーダーとアダプターにとってより理にかなっていると思います。ただし、これは避けられません。値を返すことによって処理が困難であることが示されている場合は、スロー例外を使用できます。

あなたの場合、次のオプションが正しい選択であるはずです。

  make calculate method boolean (true=success, false - failure)
于 2012-05-01T07:27:32.587 に答える
-1

Exceptionがスローされる可能性があることを宣言することは、それがクライアントコードによって処理される必要があることを示していることを理解することが重要です。これは、メソッドの作成者であるあなたが、単にそれを通過させることはできないことを意味します。

一方、計算の失敗がそれほど深刻ではなく、クライアントコードにとって問題である可能性があり、そうでない可能性がある場合は、boolean指定したとおりに戻って、クライアントコードに特別な処理を適用するかどうかを決定させることができます。クライアントが単なる情報よりも多くの情報を必要としていると思われる場合は、booleanいつでも何らかのCalculationResultオブジェクトを返すことができます。

于 2012-05-01T06:41:39.643 に答える