我喜欢番石榴的前提条件,但我真正需要的是另外一种方法 - 检查数字是否在范围内。像这样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
?
答案 0 :(得分:8)
我说的原因有很多。以下是主要内容:
Preconditions
方法都会为其检查的内容抛出特定的异常类型:NullPointerException
,IllegalArgumentException
,IllegalStateException
或IndexOutOfBoundsException
。广义范围检查没有比IllegalArgumentException
抛出更具体的异常。checkArgument
和checkState
执行您需要的一切。你可以写checkArgument(value >= min && value <= max, ...)
。你正在检查的内容很简单明了。此外:
int
s作为边界,所以你真的想允许任何Comparable
。答案 1 :(得分:5)
我认为使用checkArgument()
:
checkArgument(min < value && value < max, "%s must be in range [%s, %s]", value, min, max);
,如果将消息字符串添加到您自己的常量定义中,则不需要太多样板,并且具有您需要的所有灵活性。