前置条件

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.


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

Guava 指南 之「前置条件」相关推荐

  1. Akka 指南 之「持久化」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 持久化 依赖 示例项目 简介 体系结构 事件源 标识符 恢复 恢复自定义 恢 ...

  2. Akka 指南 之「消息传递可靠性」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 消息传递可靠性 一般规则 讨论:"至多一次"是什么意思? ...

  3. keil5图标变成白色_设计师必看的图标设计指南「下」

    书接前文,图标设计指南下篇. 我们了解了 icon 的基本知识,那么如何设计一个好的 icon 呢?怎样评判我们的 icon 是否合适,是否贴合整个产品呢?我们需要了解什么才是一个好的 icon . ...

  4. Akka 指南 之「Akka 简介」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. Akka 简介 欢迎来到 Akka,它是一组用于设计跨越处理器和网络的可扩展.弹性系统 ...

  5. Akka 指南 之「集群指标扩展」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 集群指标扩展 依赖 简介 指标收集器 指标事件 Hyperic Sigar ...

  6. Akka 指南 之「调度器」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 调度器 依赖 简介 默认调度器 查找调度器 为 Actor 设置调度器 调度 ...

  7. 2020年博士研究生报考指南「指南+复习真题」

    一.选拔方式 (一)普通招考.面向社会公开招考,由学校自行命题并组织入学考试,从考生中择优选拔. (二)硕博连读.面向修完规定课程的本校全日制非定向就业的在学学术学位硕士研究生选拔博士研究生, (三) ...

  8. Akka 指南 之「跨多个数据中心集群」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 跨多个数据中心集群 动机 定义数据中心 成员关系 故障检测 集群单例 集群分 ...

  9. Akka 指南 之「集群客户端」

    温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star.Fork,纠错. 文章目录 集群客户端 依赖 简介 一个示例 ClusterClientReceptio ...

最新文章

  1. [云炬创业基础笔记]第六章商业模式测试24
  2. boost::hana::unfold_right用法的测试程序
  3. 触发bfc的html元素,什么是BFC? CSS 使用伪元素清除浮动的方法
  4. php.ini配置详解 号,php INI配置文件的解析实现分析
  5. Spark SQL 源代码分析之Physical Plan 到 RDD的详细实现
  6. php ip地址管理系统,phpIPAM – 免费开源的IP地址管理工具,重量级
  7. 常见笔顺错误的字_容易出错的汉字|汉字中哪些字笔顺容易错
  8. python爬取微信好友教程_Python爬取微信好友
  9. python制作字符动画
  10. python 已知三条边求三角形的角度
  11. C语言练习题,从键盘输入一个字符,在给定的字符串中寻找该输入字符,若找到将该字符从字符串中删掉,并输出该字符串,没有找到给出提示信息“未找到”。
  12. Meltdown Reading Kernel Memory from User Space
  13. SCI论文分区有两种方法
  14. 儿童台灯怎么选对眼睛好?分享央视推荐的护眼灯
  15. 微机原理课程设计--计算器
  16. 无线AP概念功率mW、灵敏度dBm、增益dBi
  17. 微信小程序网络字体安卓实机无法加载解决方案
  18. 计算机二本院校排名民办河北,2018河北二本大学排名
  19. C# 唯品会JITJITX对接
  20. ARM中MRS汇编指令

热门文章

  1. 树莓派-4-温度CPU内存硬盘状态信息
  2. 麒麟芯片配上鸿蒙系统有多快,麒麟芯片和鸿蒙系统靠边站,纯国产飞腾芯片和麒麟系统早已大规模使用...
  3. php更换鼠标指针详细,window_Win7系统鼠标指针怎么更改?Win7系统更换鼠标指针的方法,  Win7系统鼠标指针怎么更改 - phpStudy...
  4. Android Alarm定时任务基础
  5. win10/win11快速隐藏/显示桌面图标快捷方式
  6. UltraEdit中文破解版
  7. ConvNeXt:新一代卷积网络,还不是ViT的时代(代码开源)
  8. 无线路由器怎么连接移动wifi来使用
  9. 全志 A83 芯片烧录方法(Linux + Windows)
  10. asp.net会员卡管理系统VS开发sqlserver数据库web结构C#编程