[Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)
本文地址: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)的更多相关文章
- [Guava官方文档翻译] 7. Guava的Immutable Collection(不可变集合)工具 (Immutable Collections Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3538666.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
- [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537508.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
- [Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537367.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- [Guava官方文档翻译] 4. 使用Guava Ordering排序 (Ordering Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3537233.html 示例 assertTrue(byLengthOrdering.reverse().isOrdered ...
- [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...
- [Guava官方文档翻译] 1.Guava简介 (Introduction)
用户指南 Guava包含Google在Java项目中用到的一些核心库:collections, caching, primitives support, concurrency 库, common a ...
- Google Guava官方教程(中文版)
Google Guava官方教程(中文版) 原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...
- Spring官方文档翻译(1~6章)
Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)
Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...
随机推荐
- sqlite3使用教程1 SQLite 命令
http://www.runoob.com/sqlite/sqlite-commands.html 本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令.这些命令被称为 SQLite 的点命 ...
- CSDN首页> 移动开发 直接拿来用!最火的Android开源项目(完结篇)
此前,CSDN移动频道推出的GitHub平台上“最受欢迎的开源项目”系列文章引发了许多读者的热议,在“直接拿来用!最火的Android开源项目”系列文章(一).(二)中,我们也相继盘点了40个GitH ...
- 对PostgreSQL cmin和cmax的理解
看例子: 开两个终端来对比: 在终端A: [pgsql@localhost bin]$ ./psql psql () Type "help" for help. pgsql=# b ...
- iOS开发笔记系列-基础1(数据类型与表达式)
学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...
- Android背景渐变色效果
Android设置背景色可以通过在res/drawable里定义一个xml,如下: [代码]xml代码: 1 <?xml version="1.0" encoding=&qu ...
- iOS开发——面试笔试精华(三)
面试笔试精华(三) 1. When to use NSMutableArray and when to use NSArray? 什么时候使用NSMutableArray,什么时候使用N ...
- Tomcat配置域名访问
在server.xml文件中的<Host>标签里面添加 <Alias>你的域名(比如:www.baidu.com)</Alias> <Context path ...
- js倒计时功能
<input id="countdown" type="text" value="140时50分20秒"> <script ...
- PAT 1008
1008. Elevator (20) The highest building in our city has only one elevator. A request list is made u ...
- 第一章 02 谈谈static关键词
引文一下吧 http://blog.csdn.net/hackbuteer1/article/details/7487694 一.static在C语言中的含义 1.静态变量作用范围在一个文件内,程序开 ...