3

私はグアバの前提条件が好きですが、それから本当に必要なのはもう1つの方法です-数が範囲内にあることを確認してください。このようなSmt

//probably there should be checkStateInRange also
public static void checkArgumentInRange(double value, int min, int max) {
    if (value < min || value > max) {
        throw new IllegalArgumentException(String.format("%s must be in range [%s, %s]", value, min, max));
    }
}

私は一人ではないと信じており、それはかなり一般的なケースです。しかし、そのような方法は存在しません。そのような方法を入れない理由はありますcom.google.common.base.Preconditionsか?

4

2 に答える 2

8

私が言うにはかなりの数の理由があります。主なものは次のとおりです。

  • 「値が範囲外」の標準のJava例外タイプはありません。Preconditions各メソッドは、チェック対象に対して特定の例外タイプをスローすることに注意してください: NullPointerException、、、または。一般化された範囲チェックには、スローするよりも具体的な例外はありません。IllegalArgumentExceptionIllegalStateExceptionIndexOutOfBoundsExceptionIllegalArgumentException
  • checkArgument必要なことはすべて行いcheckStateます。あなたはただ書くことができますcheckArgument(value >= min && value <= max, ...)。何をチェックしているのかは単純明快です。

さらに:

  • ここで必要になる可能性のあるさまざまな組み合わせが多すぎます。@rspが言及するような排他的/包括的境界など。
  • 境界にはsのみを許可するように制限されてintいるため、実際には境界にsを許可する必要Comparableがあります。
  • この時点で、値がRangeに含まれているかどうかを確認していることに気付きます。
于 2011-11-21T20:32:43.500 に答える
6

私はあなたが使用することによって非常に近づくことができると思いますcheckArgument()

checkArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);

これは、メッセージ文字列を独自の定数定義に追加する場合、定型文ではなく、必要なすべての柔軟性を備えています。

于 2011-11-21T20:33:35.137 に答える