Guava库学习:学习使用Preconditions工具类进行代码的校验

    连接地址:http://www.xx566.com/detail/127.html
html

    Preconditions是guava提供的用于进行代码校验的工具类,其中提供了许多重要的静态校验方法,用来简化咱们工做或开发中对代码的校验或预 处理,可以确保代码符合咱们的指望,而且可以在不符合校验条件的地方,准确的为咱们显示出问题所在,接下来,咱们就来学习使用Preconditions 进行代码校验。java

    

    翻开Preconditions的源码,咱们看到,guava进行了大量方法的重载,组成了Preconditions工具类,下面咱们先简单的了解一下,全部的14个静态方法,以下:web

 

checkArgument(boolean expression):用来校验表达式是否为真,通常用做方法中校验参数express

checkArgument(boolean expression, @Nullable Object errorMessage):校验表达式是否为真,不为真时显示指定的错误信息。less

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):容许在错误信息中使用占位符。google

 

checkNotNull(T reference):校验对象是否为空。spa

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 )
相关文章
相关标签/搜索