連接地址: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
)