检查范围前提条件

时间:2011-11-21 20:07:02

标签: java guava preconditions

我喜欢番石榴的前提条件,但我真正需要的是另外一种方法 - 检查数字是否在范围内。像这样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

2 个答案:

答案 0 :(得分:8)

我说的原因有很多。以下是主要内容:

  • “超出范围的值”没有标准的Java异常类型。请注意,每个Preconditions方法都会为其检查的内容抛出特定的异常类型:NullPointerExceptionIllegalArgumentExceptionIllegalStateExceptionIndexOutOfBoundsException。广义范围检查没有比IllegalArgumentException抛出更具体的异常。
  • checkArgumentcheckState执行您需要的一切。你可以写checkArgument(value >= min && value <= max, ...)。你正在检查的内容很简单明了。

此外:

  • 您可能想要的组合太多了。 @rsp提及的独家/包含范围等
  • 限制只允许int s作为边界,所以你真的想允许任何Comparable
  • 此时您会注意到您只是检查该值是否包含在Range中。

答案 1 :(得分:5)

我认为使用checkArgument()

可以非常接近
checkArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);

,如果将消息字符串添加到您自己的常量定义中,则不需要太多样板,并且具有您需要的所有灵活性。