前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Guava 指南 之「前置条件」

Guava 指南 之「前置条件」

作者头像
CG国斌
发布2018-01-08 17:53:21
7400
发布2018-01-08 17:53:21
举报
文章被收录于专栏:维C果糖维C果糖

前置条件

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之前调用next

IllegalStateException

checkElementIndex(int index, int size)

在指定长度的列表、字符串和数组中检查index是否有效。一个有效的index应该是在0与指定长度之间的值。你不需要直接传递列表、字符串或者数组,只需传递指定的长度即可。此方法返回index

IndexOutOfBoundsException

checkPositionIndex(int index, int size)

检查index是否为指定大小的列表、字符串或数组的有效位置索引。一个有效的位置索引应该是在0与指定长度之间的值。你不需要直接传递列表、字符串或数组,只需传递它的大小即可。此方法返回index

IndexOutOfBoundsException

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.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前置条件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档