2

メソッドを作成するときは、ほとんどの場合、有効でなければならないことをチェックする必要があります。

IllegalArgumentExceptionメソッドのprice引数が無効な場合は、をスローする必要があるとします。プログラムを細かく分割したいので、プライベートメソッドを作成します。ただし、次のような名前のメソッドを作成しvalidatePrize、ブール値を返すことをお勧めします。このメソッドをifステートメントでチェックして、メソッドを呼び出し、validatePrizeIllegalArgumentExceptionをスローします。

または、メソッドが何も返さず、例外もスローする方がよいでしょうか。

4

5 に答える 5

2

これに対する答えは、主に好みに基づいていると思います。呼び出されたときに例外をスローしない再利用可能な関数が必要な場合は、ブール値の戻り値を持つ validatePrize を選択します。例外をチェックするためだけに使用している場合は、例外をスローする validatePrize を使用します。この場合、クラス自体の外部からの例外処理に使用できるため、例外をスローする validatePrize の方が適していると言えます。

于 2012-10-27T23:12:51.987 に答える
1

それは完全に依存します。

まず、validatePrizeブールメソッドのようには聞こえないため、IMO は何も返すべきではありません。

ガード句がたくさんある場合は、例外をスローします。同じ属性のコレクションに対してアプリ全体で検証が必要な場合は、それをメソッドにしますが、そのメソッドはガードの一部としても使用できます。

于 2012-10-27T23:15:01.173 に答える
0

負の値が無効な引数であることはすでにわかっているため、次のようにしてそれを防ぐことができます。

if(val < 0)
{
  return false;
}

そのような状況から身を守ることが最善の方法であると、本で読んだことがあります。「例外基準」を満たしていないか、満たしていません。そうです、ブール値を返すだけです。

ただし、例外をスローするのが好きな人もいますが、それはあなた次第です。

于 2012-10-27T23:11:10.740 に答える
0

チェックをメソッドに委譲する場合は、そのメソッドから直接例外をスローして、コンストラクターのコードが乱雑になるのを防ぐこともできます。これは、グアバで使用される典型的なアプローチPreconditionsです。

this.value = Preconditions.checkNotNull(value, "value must not be null");

この行は、引数が null の場合、関連付けられたメッセージとともに NullPointerException をスローします。引数が null でない場合、1 行で引数のチェックと代入を可能にする引数を返します。

興味のある方は、コードは次のようになります。

public static <T> T checkNotNull(T reference, Object errorMessage) {
  if (reference == null) {
    throw new NullPointerException(String.valueOf(errorMessage));
  }
  return reference;
}

ユースケースに同様のアプローチを使用できます。

于 2012-10-27T23:13:56.797 に答える
0

これについての私自身の意見は、例外は何かが予期しない場合にのみスローされるべきであるということです。NULL ポインターは、これ、または ID の負の数 (常に正でなければなりません) の場合があります。基本的に、例外はプログラム内の問題を示すために使用されます。ユーザーの入力を単純に検証する場合は、ブール値とテストを使用します。

于 2012-10-27T23:18:26.630 に答える