前置條件:讓方法調用的前置條件判斷更簡單。
在我們的日常開發中,經常要對入參進行一定的參數校驗,比如是否爲空,參數的取值範圍是否符合要求等等。這種參數校驗如果我們單獨進行校驗的話,代碼的重複率比較高,也不是很優雅。Guava提供了一個類PreConditions來統一校驗我們的參數,同時可以拋出對應的異常信息,將參數校驗的工作進行了統一。
下面是它提供的幾種校驗方法:
方法聲明(不包含額外參數) | 描述 | 檢查失敗時拋出的異常 |
---|---|---|
checkArgument(boolean) | 檢查boolean是否爲true,用來檢查傳遞給方法的參數。 | IllegalArgumentException |
checkNotNull(T) | 檢查value是否爲null,該方法直接返回value,因此可以內嵌使用checkNotNull。 | NullPointerException |
checkState(boolean) | 用來檢查對象的某些狀態。 | IllegalStateException |
checkElementIndex(int index, int size) | 檢查index作爲索引值對某個列表、字符串或數組是否有效。index>=0 && index |
Preconditions.checkNotNull(name, "name may not be null");
Preconditions.checkArgument(age >= 18 && age < 99, "age must in range (18,99)");
Preconditions.checkArgument(desc !=null && desc.length() < 10, "desc too long, max length is ", 10);
在編碼時,如果某個值有多重的前置條件,我們建議你把它們放到不同的行,這樣有助於在調試時定位。此外,把每個前置條件放到不同的行,也可以幫助你編寫清晰和有用的錯誤消息。
看似Preconditions實現很簡單,他的意義在於爲我們提供了同一的參數校驗,並對不同的異常情況拋出合適類型的異常,並對異常信息做格式化。