Guava 指南 之「前置条件」

前置条件

Guava 提供了很多用于进行前置条件检查的工具,我们强烈建议静态导入这些方法。

每个方法都用三种形式:

  • 没有额外的参数。抛出的任何异常都没有错误信息。
  • 有一个额外的Object参数。抛出的任何异常都带有一个object.toString()的错误信息。
  • 有一个额外的String参数以及任意数量的附加Object参数。这些行为类似于printf,但是为了 GWT 兼容性和高效性仅允许%s,例如:
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
checkArgument(i < j, "Expected i < j, but %s > %s", i, j);
方法签名(不包括额外参数)描述失败时抛出的异常
checkArgument(boolean)检查boolean型是否为true,用于校验传递给方法的参数IllegalArgumentException
checkNotNull(T)检查值是否为null,直接返回参数值,所以你可以在代码中直接使用checkNotNull(value)NullPointerException
checkState(boolean)检查对象的某些状态,而不依赖于方法参数。例如,一个Iterator可能使用这个方法来检查在调用任何remove之前调用nextIllegalStateException
checkElementIndex(int index, int size)在指定长度的列表、字符串和数组中检查index是否有效。一个有效的index应该是在0与指定长度之间的值。你不需要直接传递列表、字符串或者数组,只需传递指定的长度即可。此方法返回indexIndexOutOfBoundsException
checkPositionIndex(int index, int size)检查index是否为指定大小的列表、字符串或数组的有效位置索引。一个有效的位置索引应该是在0与指定长度之间的值。你不需要直接传递列表、字符串或数组,只需传递它的大小即可。此方法返回indexIndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size)在指定长度的列表、字符串或数组中检查[start, end)的范围是否有效。此方法自带错误消息IndexOutOfBoundsException

相比 Apache Commons 提供的类似方法,我们把 Guava 中的前置条件作为首选方法是有原因的,简要地:

  • 在静态导入后,Guava 的方法清晰明了。checkNotNull清楚地描述它能做了什么以及会抛出什么异常;
  • checkNotNull在校验之后直接返回参数,允许你在构造函数中保持字段的单行赋值风格,例如:this.field = checkNotNull(field)
  • 简单的、参数可变的printf风格异常信息。(正是基于这个优点,让我们为什么在 JDK 7 已经引入Objects.requireNonNull的情况下,仍然建议你使用checkNotNull.)

我们建议你将前置条件放在不同的行,这可以帮助你在调试期间找出到底是哪些前置件导致的失败。另外,你应该提供有用的错误消息,这让在每个前置条件都位于不同行时更容易定位错误。


翻译声明:本文翻译自 GitHub,Google Guava - PreconditionsExplained.


———— ☆☆☆ —— 返回 -> Guava 中文指南 <- 目录 —— ☆☆☆ ————

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值