Guava庫學習:學習使用Preconditions工具類進行代碼的校驗

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

 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 )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章