Java 值机范围先决条件
我喜欢番石榴的先决条件,但我真正需要的是从它的另一个方法-检查数字是否在范围内。像这样的SmtJava 值机范围先决条件,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
//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
方法是一个非常好的观点。非常感谢。[和]是封闭范围。因此,“mincontains
checkArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);