前置條件:讓方法調(diào)用的前置條件判斷更簡(jiǎn)單。
Guava 在 Preconditions 類中提供了若干前置條件判斷的實(shí)用方法,我們強(qiáng)烈建議在 Eclipse 中靜態(tài)導(dǎo)入這些方法。每個(gè)方法都有三個(gè)變種:
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
checkArgument(i < j, "Expected i < j, but %s > %s", i, j);
方法聲明(不包括額外參數(shù)) | 描述 | 檢查失敗時(shí)拋出的異常 |
checkArgument(boolean) | 檢查 boolean 是否為 true,用來(lái)檢查傳遞給方法的參數(shù)。 | IllegalArgumentException |
checkNotNull(T) | 檢查 value 是否為 null,該方法直接返回 value,因此可以內(nèi)嵌使用 checkNotNull。 | NullPointerException |
checkState(boolean) | 用來(lái)檢查對(duì)象的某些狀態(tài)。 | IllegalStateException |
checkElementIndex(int index, int size) | 檢查 index 作為索引值對(duì)某個(gè)列表、字符串或數(shù)組是否有效。index>=0 && index<size * | IndexOutOfBoundsException |
checkPositionIndex(int index, int size) | 檢查 index 作為位置值對(duì)某個(gè)列表、字符串或數(shù)組是否有效。index>=0 && index<=size * | IndexOutOfBoundsException |
checkPositionIndexes(int start, int end, int size) | 檢查[start, end]表示的位置范圍對(duì)某個(gè)列表、字符串或數(shù)組是否有效* | IndexOutOfBoundsException |
譯者注:
索引值常用來(lái)查找列表、字符串或數(shù)組中的元素,如 List.get(int), String.charAt(int)
位置值和位置范圍常用來(lái)截取列表、字符串或數(shù)組,如 List.subList(int,int), String.substring(int)
相比 Apache Commons 提供的類似方法,我們把 Guava 中的 Preconditions 作為首選。Piotr Jagielski 在他的博客中簡(jiǎn)要地列舉了一些理由:
在編碼時(shí),如果某個(gè)值有多重的前置條件,我們建議你把它們放到不同的行,這樣有助于在調(diào)試時(shí)定位。此外,把每個(gè)前置條件放到不同的行,也可以幫助你編寫清晰和有用的錯(cuò)誤消息。