Guava学习之Basic Utilities ——Preconditions

Preconditions

Guava 提供的预先检查参数的工具,强烈建议静态导入。

这些方法有三个变体:

  1. 没有多余的参数,任何异常都会在没有错误信息的情况下抛出。
  2. 一个额外的object类型参数,使得任何异常都会随着object.toString()抛出错误信息。
  3. 一个额外的具有任意数量的附加对象参数的String类型参数, 。这种行为类似于printf,但是为了GWT兼容性和效率,它只允许%s指示符。
    • Note: checkNotNull, checkArgument 与checkState 大量重载了原始组合与Object 参数而没有使用varargs数组—— 允许在大多数情况下避免上述原始调用和varags 数组分配。

第三种变体的例子:

checkArgument(i >= 0, "Argument was %s but expected nonnegative", i); checkArgument(i < j, "Expected i < j, but %s >= %s", i, j);

Signature (not including extra args)DescriptionException thrown on failure
checkArgument(boolean)用于验证方法的参数是否为true。IllegalArgumentException
checkNotNull(T)检查value是不是非null,直接返回该值因此可以内联使用。NullPointerException
checkState(boolean)检查对象的状态,并不依赖于方法的参数。例如,一个Iterator在调用remove之前应该检查next是否已经被调用。IllegalStateException
checkElementIndex(int index, int size)检查index是否为具有指定大小的列表、字符串或数组中的有效元素索引。元素索引的范围可以从0到size不等。不直接传递列表、字符串或数组,只需传递其大小即可。最终返回索引。IndexOutOfBoundsException
checkPositionIndex(int index, int size)检查index是否为具有指定大小的列表、字符串或数组中的有效元素索引。元素索引的范围可以从0到size不等。不直接传递列表、字符串或数组,只需传递其大小即可。最终返回索引。IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size)检查[start, end) 范围内的列表、字符串或数组中的有效元素索引。带有自己的错误信息。IndexOutOfBoundsException

 

我们倾向与利用自己的前提条件检查,而不是使用Apache Commons 的有几个原因。简要地:

  • 在静态导入后,Guava 方法清晰易懂。checkNotNull 方法仅从名字就可以看出方法的作用以及将会抛出的异常。
  • checkNotNull 返回验证过的参数,允许使用简单的一行构造方法:this.field = checkNotNull(field);.
  • 简单可变的"printf-style" 异常信息. (这是我们为什么推荐使用checkNotNull 而不是Objects.requireNonNull的原因)

我们建议您将前提条件分解为不同的行,这可以帮助您在调试时找出哪个前提失败。另外,您应该提供有用的错误消息,这在检查自己的行上的错误时会更容易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值