Java 值机范围先决条件

Java 值机范围先决条件,java,guava,preconditions,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 IllegalArgumentE

我喜欢番石榴的先决条件,但我真正需要的是从它的另一个方法-检查数字是否在范围内。像这样的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));
    }
}
//可能还应该有checkStateInRange
公共静态void checkArgumentRange(双值,最小整数,最大整数){
如果(值<最小值>最大值){
抛出新的IllegalArgumentException(String.format(“%s必须在[%s,%s]”范围内,值、最小值、最大值));
}
}

我相信我并不孤单,这是一个相当普遍的情况。但这种方法并不存在。有什么理由不把这样的方法放在
com.google.common.base.premissions

我想说的理由有很多。以下是主要的:

  • “值超出范围”没有标准的Java异常类型。请注意,每个
    预条件
    方法都会为其检查的内容引发特定的异常类型:
    NullPointerException
    IllegalArgumentException
    IllegalStateException
    IndexOutboundsException
    。广义范围检查不会有比抛出的
    IllegalArgumentException
    更具体的异常

  • checkArgument
    checkState
    做你需要的一切。您只需编写
    checkArgument(value>=min&&value我想您可以通过使用
    checkArgument()
    非常接近:

    checkArgument(最小值<值和&值<最大值,“%s”必须在[%s,%s]”范围内,值、最小值、最大值);
    

    如果您将消息字符串添加到自己的常量定义中,它就不是什么样板文件,具有您所需要的所有灵活性。

    p.S.是的,我知道我可以创建新类,如Angle,以对值进行一些限制。对于其中一个类,您需要4个这样的方法来覆盖包含和排除边界条件。@rsp,正确。实际上,它还不错。或者,我们可以引入
    Range
    类。
    Range
    类和
    contains
    方法是一个非常好的观点。非常感谢。[和]是封闭范围。因此,“mincheckArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);