公眾號「架構成長指南」,專注於生產實踐、雲原生、分散式系統、大資料技術分享。
Guava Preconditions類 提供靜態方法列表,用於檢查是否使用有效引數值呼叫方法或建構函式。如果前提條件失敗,則會丟擲指定的異常。
前置依賴
引入 pom
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>
checkArgument
Preconditions類的checkArgument方法用於校驗傳遞給呼叫方法的引數的正確性。該方法接收一個布林條件,當條件為false時,丟擲IllegalArgumentException異常。
讓我們透過一些示例來看看如何使用這個方法。
import com.google.common.base.Preconditions;
public class ExampleClass {
public void processNumber(int number) {
Preconditions.checkArgument(number > 0, "Number must be positive");
// 進行處理邏輯
}
public static void main(String[] args) {
ExampleClass example = new ExampleClass();
example.processNumber(10); // 正常呼叫,引數符合條件
example.processNumber(-5); // 丟擲IllegalArgumentException異常,引數不符合條件
}
}
丟擲帶有模板的錯誤資訊
public class PreconditionsTest {
public void processNumber(int number) {
Preconditions.checkArgument(number > 0, "Number must be positive: %s", number);
// 進行處理邏輯
}
@Test
public void testCheckArgumentTemplate() {
processNumber(10);// 正常呼叫,引數符合條件
processNumber(-5); // 丟擲IllegalArgumentException異常,引數不符合條件,異常訊息中包含具體的引數值
}
}
在上述示例中,我們在checkArgument方法的第二個引數中使用了帶有佔位符的訊息模板:"Number must be positive: %s"。該佔位符%s表示在丟擲異常時會被具體的引數值替換。在呼叫processNumber方法時,如果傳遞的引數不滿足條件,將丟擲IllegalArgumentException異常,並在異常訊息中包含具體的引數值。
checkElementIndex
Preconditions類的checkElementIndex方法用於驗證索引是否包含在集合中,如果不包含,該方法將丟擲IndexOutOfBoundsException異常
@Test
public void testCheckElementIndex(){
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
int index = 3;
Preconditions.checkElementIndex(index, list.size(), "Invalid index");
String element = list.get(index);
System.out.println("Element at index " + index + ": " + element);
}
在本例中,我們使用集合的size作為集合的大小引數,並提供了錯誤訊息Invalid index
。如果索引超出了集合的有效範圍,將丟擲異常並顯示錯誤訊息。
如果在範圍內,則使用list.get方法獲取指定索引的元素,並將其列印出來。
checkNotNull
checkNotNull方法檢查作為引數提供的值是否為 null。如果不為 null 則返回校驗後的值。如果傳遞給此方法的值為 null,則丟擲NullPointerException。
以下是一個示例,說明了checkNotNull方法的使用:
@Test
public void testCheckNotNull(){
String name = "John Doe";
Preconditions.checkNotNull(name, "Name cannot be null");
System.out.println("Name: " + name);
}
在此示例中,我們使用checkNotNull方法驗證字串name是否為null。如果name不為null,將繼續處理;如果name為null,將丟擲NullPointerException異常,並顯示錯誤訊息"Name cannot be null"。
checkState
Preconditions類的checkState方法用於驗證物件或程式的狀態是否符合預期。以下是一個示例,說明了checkState方法的使用:
@Test
public void testCheckState() {
int[] validStates = {-1, 0, 1};
int givenState = 8;
String message = "You have entered an invalid state";
Preconditions.checkState(Arrays.binarySearch(validStates, givenState) > 0, message);
}
在此示例中,我們使用checkState方法驗證givenState是否包含在validStates陣列中。如果false,則丟擲IllegalStateException,並顯示資訊為You have entered an invalid state
,否則繼續處理;
總結
在本教程中,我們演示了Guava庫中PreConditions類的各種方法。Preconditions類提供了靜態方法的集合,用於驗證引數是否有效。