<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
链接地址:http://www.xx566.com/detail/127.html
Preconditions是guava提供的用于进行代码校验的工具类,其中提供了许多重要的静态校验方法,用来简化我们工作或开发中对代码的校验或预 处理,能够确保代码符合我们的期望,并且能够在不符合校验条件的地方,准确的为我们显示出问题所在,接下来,我们就来学习使用Preconditions 进行代码校验。
翻开Preconditions的源码,我们看到,guava进行了大量方法的重载,组成了Preconditions工具类,下面我们先简单的了解一下,所有的14个静态方法,如下:
checkArgument(boolean expression):用来校验表达式是否为真,一般用作方法中校验参数
checkArgument(boolean expression, @Nullable Object errorMessage):校验表达式是否为真,不为真时显示指定的错误信息。
checkArgument(boolean expression, @Nullable String errorMessageTemplate, @Nullable Object... errorMessageArgs):校验表达式是否为真,不为真时显示错误信息,错误信息中允许使用占位符。
checkState(boolean expression):校验表达式是否为真,一般用作校验方法返回是否为真。
checkState(boolean expression, @Nullable Object errorMessage):当表达式为假的时候,显示指定的错误信息。
checkState(boolean expression,@Nullable String errorMessageTemplate,@Nullable Object... errorMessageArgs):允许在错误信息中使用占位符。
checkNotNull(T reference):校验对象是否为空。
checkNotNull(T reference, @Nullable Object errorMessage):对象为空时显示指定的错误信息。
checkNotNull(T reference, @Nullable String errorMessageTemplate,@Nullable Object... errorMessageArgs):允许在错误信息中使用占位符。
checkElementIndex( int index, int size, @Nullable String desc):校验元素的索引值是否有效,index大于等于0小于size,在无效时显示错误描述信息。
checkElementIndex(int index, int size):错误描述信息为“index”
checkPositionIndex(int index, int size, @Nullable String desc):校验元素的索引值是否有效,index大于等于0小于等于size,在无效时显示错误描述信息。
checkPositionIndex(int index, int size):错误描述信息为“index”
checkPositionIndexes(int start, int end, int size):校验大于等于start,小于end的list的长度是否为size。
接下来,我们通过简单的例子来应用这些静态方法,代码如下:
package guava;
import com.google.common.base.Preconditions;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* Preconditions:代码校验工具类
* User: Realfighter
* Date: 2014/8/18
* Time: 13:50
*/
public class PreconditionsTest {
//打印输出方法
private static void print(Object obj) {
System.out.println(String.valueOf(obj));
}
//测试方法
private static boolean testMethod() {
return 1 > 2;
}
//测试对象
private static Object testObject() {
return null;
}
@Test
public void testPreconditions() {
//checkArgument
try {
//校验表达式是否正确,并使用占位符输出错误信息
Preconditions.checkArgument(1 > 2, "%s is wrong", "1 > 2");
} catch (IllegalArgumentException e) {
print(e.getMessage()); // 1 > 2 is wrong
}
//checkState
try {
//校验表达式是否正确,并使用占位符输出错误信息,使用方法作为表达式
Preconditions.checkState(testMethod(), "%s is wrong", "testMethod()");
} catch (IllegalStateException e) {
print(e.getMessage()); // testMethod() is wrong
}
//checkNotNull
try {
//校验对象是否为空,并使用占位符输出错误信息
Preconditions.checkNotNull(testObject(), "%s is null", "testObject()");
} catch (NullPointerException e) {
print(e.getMessage()); // testObject() is null
}
//初始化测试用list
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
//checkElementIndex
try {
//校验元素索引是否有效 ,使用checkPositionIndex校验
Preconditions.checkElementIndex(10, list.size());
//在临界值size处产生异常
} catch (IndexOutOfBoundsException e) {
print(e.getMessage()); // index (10) must be less than size (10)
}
//checkPositionIndex
try {
//校验元素索引是否有效,使用checkPositionIndex校验
Preconditions.checkPositionIndex(10, list.size());
//在临界size处不产生异常
print("checkPositionIndex does not throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
print(e.getMessage()); // checkPositionIndex does not throw IndexOutOfBoundsException
}
//checkPositionIndexes
try {
//校验是否是有效的索引区间
Preconditions.checkPositionIndexes(3, 11, list.size());
} catch (IndexOutOfBoundsException e) {
print(e.getMessage()); // end index (11) must not be greater than size (10)
}
}
}
运行结果如下:
1
>
2
is wrong
testMethod() is wrong
testObject() is
null
index (
10
) must be less than size (
10
)
checkPositionIndex does not
throw
IndexOutOfBoundsException
end index (
11
) must not be greater than size (
10
)