检查范围前提条件

Sta*_*lin 3 java preconditions guava

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

我相信我并不孤单,这是一个很常见的情况.但这种方法不存在.有没有理由不把这些方法放进去com.google.common.base.Preconditions

Col*_*inD 8

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

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

另外:

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


rsp*_*rsp 5

我认为你可以通过使用checkArgument():

checkArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);
Run Code Online (Sandbox Code Playgroud)

如果将消息字符串添加到您自己的常量定义中,那么它就没有太大的功能,并且具有您需要的所有灵活性.