[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 ...
随机推荐
- 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!
自己编写的基于VC++6.0的串口调试软件源程序! 程序下载链接: 点击打开链接
- linux下Memcached安装以及PHP的调用
一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.官网下载:http://libevent.org/ #wget https:/ ...
- Activity的生命周期,BACK键和HOME键生命周期
Activity的生命周期模型在Google提供的官方文档上有比较详细的一个图示 public class HelloActivity extends Activity { public static ...
- ILSpy反编译工具的使用
以前一直使用reflector来查看.net类库的一些信息,不过,自2011年2月份开始,reflector就开始转向收费软件了,所以爱好免费软件的开发者们转而开发自己的反编译软件.于是ILspy就因 ...
- js操作json添加元素和数据的方法
function addServerUrlToJson() { var json_tem = [{"name":"a","value":1} ...
- [Web] What Is JSONP?
JSONP—or JSON with padding—is a sneaky technique that web developers came up with to work around the ...
- 【转】Oracle 10g RAC TAF
本人转自:http://www.cnblogs.com/future2012lg/archive/2013/10/12/3365978.html Oracle RAC 同一时候具备HA(High Av ...
- SAP 库存查询算法
SAP 的后台有关库存的表,是一种很有意思的表.库存表分两种,一种是当前库存表,另一种是历史库存表.例如有MARD\MCHB\MSPR\MKOL等表,对应的历史库存表就是MARDH\MCHBH\MSP ...
- [Effective C++ --024]若所有参数皆需类型转换,请为此采用non-member函数
引言 假设我们有这样的类: class A{ public: A(, ) {}; int num() const; int den() const; const A operator* (const ...
- linux之ubuntu下php环境配置
本文主要说明如何在Ubuntu下配置PHP开发环境LAMP. Ubuntu 搭建 php 环境 所谓LAMP:Linux,Apache,Mysql,PHP 安装 Apache2:(注意可以 ...