Guava使用之Preconditions

Guava的Preconditions内置了很多前置条件判断方法,这些判断方法经常放在方法的最前面,用来检查入参的条件是否符合,它可以使代码变得更整洁。

每个方法都有三个变种:
1. 没有额外的参数,抛出的异常中没有错误信息
2. 有一个object对象作为额外参数,抛出的异常中以object.toString()作为错误信息
3. 有一个String作为额外参数,附加不定数量的object对象,类似于printf,string中有占位符,object分别指定占位符的内容,不过只支持%s

方法声明(不包括额外参数) 描述 检查抛出的异常
checkArgument(boolean) 检查boolean是否为true,用来检查传递给方法的参数。 IllegalArgumentException
checkNotNull(T) 检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。 NullPointerException
checkState(boolean) 用来检查对象的某些状态。 IllegalStateException
checkElementIndex(int index,int size) 检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size * IndexOutOfBoundsException
checkPositionIndex(int index,int size) 检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size * IndexOutOfBoundsException
checkPositionIndexs(int start,int end,int size) 检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效* IndexOutOfBoundsException

对于最后三个方法:

  • 索引值常用来查找列表、字符串或数组中的元素,如List.get(int), String.charAt(int)
  • 位置值和位置范围常用来截取列表、字符串或数组,如List.subList(int,int), String.substring(int)

在编码的时候,如果一个参数有多个前置条件,应该把他们放在不同行,这样有利于调试和设置错误信息

下面以checkArgument()为例:
没有额外的错误信息

public static void checkArgument(boolean expression) {
  if (!expression) {
    throw new IllegalArgumentException();
  }
}

有一个额外的错误信息对象object,错误信息是其toString()

public static void checkArgument(boolean expression, @Nullable Object errorMessage) {
  if (!expression) {
    throw new IllegalArgumentException(String.valueOf(errorMessage));
  }
}

有一个额外的String和不定数量的object(这个可以任意,只要是集成object的对象都可以,类型不限,数量不限)

public static void checkArgument(
    boolean expression,
    @Nullable String errorMessageTemplate,
    @Nullable Object... errorMessageArgs) {
  if (!expression) {
    throw new IllegalArgumentException(format(errorMessageTemplate, errorMessageArgs));
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章