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));
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值