Chapter 2 -- Preconditions
explained
Preconditions
Guava provides a number of precondition checking utilities. We strongly recommend importing these statically. (How to do this easily in Eclipse.)
Guava提供了一系列precondition检查工具. 我们强烈推荐你静态引入这些工具
Each method has three variants:
每种方法都有三种变体
- No extra arguments. Any exceptions are thrown without error messages.
- 无额外参数版本.异常抛出时不带错误消息
- An extra Object argument. Any exception is thrown with the error message object.toString().
- 有一个额外的Object参数版本.异常抛出时会附带一个object.toString()的错误消息
- An extra String argument, with an arbitrary number of additional Object arguments. This behaves something like printf, but for GWT compatibility and efficiency, it only allows %s indicators. Example:
- 有一个额外的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);
| Signature (not including extra args) | Description | Exception thrown on failure |
| checkArgument(boolean) |
Checks that the boolean is true. Use for validating arguments to methods. 检查boolean是否是true. 用来验证方法参数 |
IllegalArgumentException |
| checkNotNull(T) |
Checks that the value is not null. Returns the value directly, so you can use checkNotNull(value) inline. 检查值是否是null. 方法直接这个值,所以你可以直接在行内使用checkNotNull(value) |
NullPointerException |
| checkState(boolean) |
Checks some state of the object, not dependent on the method arguments. For example, an Iterator might use this to check that next has been called before any call to remove. 检查对象的状态, 它不依赖于方法参数. 例如, Iterator可能会用这个方法来检查next是否在remove之前调用 |
IllegalStateException |
| checkElementIndex(int index, int size) |
Checks that index is a valid element index into a list, string, or array with the specified size. An element index may range from 0 inclusive to size exclusive. You don't pass the list, string, or array directly; you just pass its size. 检查index是否是一个合法的长度为size的list,string,array的element index.element index的范围从0(包括)到size(不包括).你不需要直接传list,string,array,只要传他们的ize 返回index |
IndexOutOfBoundsException |
| checkPositionIndex(int index, int size) |
Checks that index is a valid position index into a list, string, or array with the specified size. A position index may range from 0 inclusive to size inclusive. You don't pass the list, string, or array directly; you just pass its size. 检查index是否是一个合法的长度为size的list.string.array的position index.position index的范围从0(包括)到size(包括).你不需要直接传list,string,array,只需要传他们的size |
IndexOutOfBoundsException |
| checkPositionIndexes(int start, int end, int size) |
Checks that [start, end) is a valid sub range of a list, string, or array with the specified size. Comes with its own error message. 检查[start, end)是否是一个长度为size的list,string,array的子范围. |
IndexOutOfBoundsException |
We preferred rolling our own preconditions checks over e.g. the comparable utilities from Apache Commons for a few reasons. Piotr Jagielski discusses why he prefers our utilities, but briefly:
因为某些原因,我们更建议使用我们的preconditions而不是使用Apache Commons 的 comparable工具. Piotr Jagielski 讨论了 为什么他愿意这么做, 简要的说一下原因:
- After static imports, the Guava methods are clear and unambiguous. checkNotNull makes it clear what is being done, and what exception will be thrown.
- 通过静态引入, Guava方法更清晰且没有歧义. checkNotNull 可以清楚的知道方法将会做什么, 它会抛出什么异常.
- checkNotNull returns its argument after validation, allowing simple one-liners in constructors: this.field = checkNotNull(field).
- checkNotNull 在验证完后返回它的参数, 允许使用简单的行内写法: this.field = checkNotNull(field).
- Simple, varargs "printf-style" exception messages. (This advantage is also why we recommend continuing to use checkNotNull overObjects.requireNonNull introduced in JDK 7.)
- 简单的可变参式"printf-style"异常信息. (这个有点也是我们为什么会在JDK7的Objects.requireNonNull的介绍中推荐使用checkNotNull的原因)
We recommend that you split up preconditions into distinct lines, which can help you figure out which precondition failed while debugging. Additionally, you should provide helpful error messages, which is easier when each check is on its own line.
我们推荐你切分preconditions到不同的行中,这样可以帮助你在debug时找出哪个precondition失败了. 另外, 你应该提供有用的错误信息, 这样当每个check在他自己的行上时更容易确认错误所在.
Chapter 2 -- Preconditions的更多相关文章
- Think Python - Chapter 18 - Inheritance
In this chapter I present classes to represent playing cards, decks of cards, and poker hands.If you ...
- Chapter 20: Diagnostics
WHAT'S IN THIS CHAPTER?n Code contractsn Tracingn Event loggingn Performance monitoringWROX.COM CODE ...
- Guava学习笔记(2):Preconditions优雅的检验参数
转自:http://www.cnblogs.com/peida/p/Guava_Preconditions.html 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按 ...
- guava学习--Preconditions
转载:https://my.oschina.net/realfighter/blog/349819 Preconditions是guava提供的用于进行代码校验的工具类,其中提供了许多重要的静态校验方 ...
- Chapter 4: Troubleshoot and debug web applications
Prevent and troubleshoot runtime issues Troubleshooting performance, security and errors using perfo ...
- Modern C++ CHAPTER 2(读书笔记)
CHAPTER 2 Recipe 2-1. Initializing Variables Recipe 2-2. Initializing Objects with Initializer Lists ...
- Guava学习笔记:Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处 ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- ApiWrapper
前面两片文章讲解了通过AIDL和Messenger两种方式实现Android IPC.而本文所讲的并不是第三种IPC方式,而是对前面两种方式进行封装,这样我们就不用直接把Aidl文件,java文件拷贝 ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...
随机推荐
- max 基础知识
MDX基本语法 MD询语句的结构及语法 MDX查询示例 基本的MDX SELECT语句包含一SELELCT字句和一个FROM字句,以及一个可选的WHERE子句.如下 SELECT {[Measures ...
- kafka配置监控和消费者测试
概念 运维 配置 监控 生产者与消费者 流处理 分区partition 一定条件下,分区数越多,吞吐量越高.分区也是保证消息被顺序消费的基础,kafka只能保证一个分区内消息的有序性 副本 每个分区有 ...
- 【python学习-2】python起步必备
1.python缩进 python 缩进是tab,还是空格呢?都可以,可以是一个tab,也可以是4个空格,但是最重要的是整个python脚本的缩进必须统一,否则会报错. 2.代码注释 python注释 ...
- ABP-Zero模块
一.介绍 二.启动模版 三.功能 1,租户管理 2,版本管理 3,用户管理 4,角色管理 5,组织单位管理 6,权限管理 7,语言管理 8,Identity Server集成 一.介绍 1,Zero模 ...
- BZOJ4042 : [Cerc2014] parades
设f[x]为x子树里能选的最多的路径数,h[x]为x子树里往上走的点的集合,且不与x子树内的最优解冲突 首先f[x]=sum(f[son]) 若h[son]与x可以直接匹配,则匹配上,f[x]++ 然 ...
- Redis和数据库 数据同步问题
Redis和数据库同步问题 缓存充当数据库 比如说Session这种访问非常频繁的数据,就适合采用这种方案:当然了,既然没有涉及到数据库,那么也就不会存在一致性问题: 缓存充当数据库热点缓存 读操作 ...
- FireDAC 下的 Sqlite [1] - 前言
很长时间没静下心来写博客了, 现在回来, 是 Delphi 不断地进步让我感动.振奋. Delphi XE5 并入了 FireDAC, 第一印象非常好, 恐怕 dbExpress 等等都要靠边站了. ...
- NXP ARM Vector Table CheckSum
Signature Creator for NXP Cortex-M Devices Algorithm for creating the checksum The reserved Cortex-M ...
- IAR EWARM Checksum Technical Note
IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...
- 【Go命令教程】9. go list
go list 命令的作用是列出指定的 代码包 的信息.与其他命令相同,我们需要以 代码包导入路径 的方式给定代码包.被给定的代码包可以有多个.这些代码包对应的目录中必须直接保存有 Go 语言源码文件 ...