[Google Guava] 1.2-前置條件
阿新 • • 發佈:2018-12-22
前置條件:讓方法呼叫的前置條件判斷更簡單。
- 沒有額外引數:丟擲的異常中沒有錯誤訊息;
- 有一個Object物件作為額外引數:丟擲的異常使用Object.toString() 作為錯誤訊息;
- 有一個String物件作為額外引數,並且有一組任意數量的附加Object物件:這個變種處理異常訊息的方式有點類似printf,但考慮GWT的相容性和效率,只支援%s指示符。例如:
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i); checkArgument(i < j, "Expected i < j, but %s > %s", i, j);
方法宣告(不包括額外引數) | 描述 | 檢查失敗時丟擲的異常 |
檢查boolean是否為true,用來檢查傳遞給方法的引數。 | IllegalArgumentException | |
檢查value是否為null,該方法直接返回value,因此可以內嵌使用checkNotNull。 | NullPointerException | |
用來檢查物件的某些狀態。 | IllegalStateException | |
檢查index作為索引值對某個列表、字串或陣列是否有效。index>=0 && index<size * | IndexOutOfBoundsException | |
檢查index作為位置值對某個列表、字串或陣列是否有效。index>=0 && index<=size * | IndexOutOfBoundsException |
譯者注:
*索引值常用來查詢列表、字串或陣列中的元素,如List.get(int), String.charAt(int)
*位置值和位置範圍常用來擷取列表、字串或陣列,如List.subList(int,int), String.substring(int)
相比Apache Commons提供的類似方法,我們把Guava中的Preconditions作為首選。Piotr Jagielski在他的部落格中簡要地列舉了一些理由:
- 在靜態匯入後,Guava方法非常清楚明晰。checkNotNull清楚地描述做了什麼,會丟擲什麼異常;
- checkNotNull直接返回檢查的引數,讓你可以在建構函式中保持欄位的單行賦值風格:this.field = checkNotNull(field)
- 簡單的、引數可變的printf風格異常資訊。鑑於這個優點,在JDK7已經引入Objects.requireNonNull的情況下,我們仍然建議你使用checkNotNull。
在編碼時,如果某個值有多重的前置條件,我們建議你把它們放到不同的行,這樣有助於在除錯時定位。此外,把每個前置條件放到不同的行,也可以幫助你編寫清晰和有用的錯誤訊息。