本文地址:http://www.cnblogs.com/hamhog/p/3536964.html

前置条件检查

Guava提供了一些检查前置条件的utilities。我们强烈建议静态import这些utilities。(如何在Eclipse中轻松做到。)

这些方法的参数列表有3种变形:

    • 不附额外的参数。抛出exception时没有错误信息。
    • 额外附一个 Object 类型的参数。抛出exception时,错误信息为 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);
基本形式 (不包含额外参数) 描述 失败时抛出的exception
checkArgument(boolean) 检查参数 boolean 是否为 true 。 用来验证方法的参数是否有效。 IllegalArgumentException
checkNotNull(T) 检查参数值是否为非null。直接返回这个值,因此你可以内联地使用 checkNotNull(value)  。 NullPointerException
checkState(boolean) 检查object的某些状态,不依赖方法的参数。例如: Iterator 在调用 remove 前可以用这个方法检查 next 是否被调用过。 IllegalStateException
checkElementIndex(int index, int size) 检查参数 index 是否是给定size的list或string、array等的合法index。一个合法index必须>=0且<size。不用把list、string或array直接传参进来;只要传它的size即可。返回  index 。 IndexOutOfBoundsException
checkPositionIndex(int index, int size) 检查参数 index 是否是给定size的list或string、array等的合法position。一个合法position必须>=0且<=size。不用把list、string或array直接传参进来;只要传它的size即可。返回  index 。 IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size) 检查参数构成的 [start, end) 是给定size的list或string、array等得合法子集。抛出exception时带有自己的错误信息。 IndexOutOfBoundsException

相比一些其他组件,如Apache Commons中的comparable utilities,我们更倾向于用我们自己的前置条件检查,主要有以下原因。Piotr Jagielski 简短阐述了他为什么选择我们的utilities:

  • 使用静态import之后,Guava的方法是清晰而无歧义的。checkNotNull 清楚地表示了它是做什么的,以及可能抛出哪个exception。
  • checkNotNull 在验证后把参数直接返回,因此在构造函数中可以简单地写为一行: this.field = checkNotNull(field) 。
  • 简单地,可加参数的"printf风格" exception信息。 (这个优势也是我们建议继续使用 checkNotNull ,而不换用JDK 7中的Objects.requireNonNull 的原因。)

我们建议把每项前置条件检查代码写在不同的行中,这样在debug的时候你就能看出是哪一项没通过了。另外,你应该附上有意义的错误信息,因此每个检查独立一行会方便一些。

中文翻译自Guava官方文档:GuavaExplained - PreconditionsExplained   译者:戴仓薯

[Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)的更多相关文章

  1. [Guava官方文档翻译] 7. Guava的Immutable Collection(不可变集合)工具 (Immutable Collections Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3538666.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...

  2. [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537508.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...

  3. [Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537367.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. [Guava官方文档翻译] 4. 使用Guava Ordering排序 (Ordering Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3537233.html 示例 assertTrue(byLengthOrdering.reverse().isOrdered ...

  5. [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...

  6. [Guava官方文档翻译] 1.Guava简介 (Introduction)

    用户指南 Guava包含Google在Java项目中用到的一些核心库:collections, caching, primitives support, concurrency 库, common a ...

  7. Google Guava官方教程(中文版)

    Google Guava官方教程(中文版) 原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...

  8. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

  9. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...

随机推荐

  1. ECshop数据库的访问统计和管理员日志的清空

    ECshop是个不错的系统,但是它有一定漏洞,若是访问量巨大的话,大量的访问统计代码会存入数据库的ecs_stats表中,甚至几天就可以达到几百兆,严重的网站直接就崩溃了.数据备份的时候也有很多不便, ...

  2. IDF实验室-简单编程-字符统计 writeup

    题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=37 网站:http://ctf.idf.cn/gam ...

  3. tomcat 6.0 压缩功能

    官方文档: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

  4. cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

    转自:http://www.cocos2dev.com/?p=281 注:自己以前也写过cocos2d-x如何优化内存的使用,以及内存不足的情况下怎么处理游戏.今天在微博中看到有朋友介绍了下内存,挺详 ...

  5. 使MySQL 支持繁体字

    要 MySQL 支持繁体字,可以将相关编码设置为 UTF8 (也叫 UTF-8).编码的设置从浏览器到表字段,一个都不能少: 浏览器设置 HTML设置 服务器 Request 对象设置 数据库连接设置 ...

  6. 全面解析java注解

    一.注解概述       1.学习注解能够读懂别人的代码,特别是框架相关的代码       2.让自己的编程更加简洁,代码更加清晰       3.让别人高看一眼,会使用自定义注解来解决问题     ...

  7. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  8. 两个字符串,若为数字则都相加,若有一个不为数字则,输出error

    import java.util.*; /*请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法输入则返回“error”: * 用例:123 234 * 输出:357 * 用例123 as ...

  9. C# 重新改变数组的长度

    重新改变数组的长度 System.Array.Resize(ref FieldName, j);

  10. [转]使用Oracle SQL Developer连接数据库并创建用户

    本文转自:http://blog.csdn.net/xw13106209/article/details/6594738 1.使用sys账户创建数据库连接 安装Oracle 11g会自带一个叫做SQL ...