在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式,并且谨慎编程所持有的一个态度就是:永远不要相信收到的数据是合法的。
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是Guava类库中提供了的一个作参数检查的工具类, 该类可以大大地简化我们代码中对于参数的预判断和处理,让我们对方法输入参数的验证实现起来更加简单。
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...
}