Preconditions:方法入参校验工具
为什么需要Preconditions
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式,并且谨慎编程所持有的一个态度就是:永远不要相信收到的数据是合法的。
平常写代码时我们可能会采用如下方式进行参数判断:
private void add(boolean bool, int[] array, int position) {
if (!bool) {
throw new IllegalArgumentException("preCondition not allow!!");
}
if (array == null) {
throw new NullPointerException("array is null!!");
}
if (array.length == 0) {
throw new IllegalArgumentException("array length is 0!!");
}
if (position > array.length || position < 0) {
throw new ArrayIndexOutOfBoundsException("position error!!");
}
//ok, do something...
}
采用这种方式,参数的判断都需要自己来逐个写方法判断,代码量多并且无法复用。
Preconditions
Preconditions是Guava类库中提供了的一个作参数检查的工具类, 该类可以大大地简化我们代码中对于参数的预判断和处理,让我们对方法输入参数的验证实现起来更加简单。
下面,使用Preconditions对上述代码进行改造:
private void testPreconditions(boolean bool, int[] array, int position) {
Preconditions.checkArgument(bool);
Preconditions.checkNotNull(array);
Preconditions.checkElementIndex(position, array.length);
//ok, do something...
}
还可以自定义错误信息:
private static void testPreconditions(boolean bool, int[] array, int position) {
Preconditions.checkArgument(bool, "not allow!!");
Preconditions.checkNotNull(array, "array is null!!");
Preconditions.checkElementIndex(position, array.length, "position error!!");
//ok, do something...
}
参考
Last updated