| 方法 | 用途 | 拋出異常 |
checkArgument(boolean) | 驗證參數邏輯條件 | IllegalArgumentException |
checkNotNull(T) | 驗證非 null | NullPointerException |
checkState(boolean) | 驗證物件狀態 | IllegalStateException |
checkElementIndex/PositionIndex | 驗證索引邊界 | IndexOutOfBoundsException |
程式碼範例
import com.google.common.base.Preconditions;
import java.util.List;
public class UserService {
public boolean findElement(List elements, String target) {
// 非空檢查,自動拋出 NPE 並附帶預設訊息
Preconditions.checkNotNull(elements, "元素列表不可為 null");
Preconditions.checkNotNull(target, "查詢目標不可為 null");
// 邏輯條件檢查,支援格式化訊息
Preconditions.checkArgument(!elements.isEmpty(), "列表不可為空,大小:%s", elements.size());
return elements.contains(target);
}
public void setAge(int age) {
// 狀態檢查:假設此方法只能呼叫一次
Preconditions.checkState(this.age == 0, "年齡已設定為 %s,不可重複設定", this.age);
Preconditions.checkArgument(age > 0 && age < 150, "年齡 %s 不在合理範圍 (1-149)", age);
this.age = age;
}
private int age = 0;
}
與 Java 原生斷言比較
有人質疑:Java 已經很慢,多幾次檢查無所謂。實際上,Guava 內部高度優化,且參數驗證的開銷遠低於因無效參數導致的深層錯誤排查成本。明確失敗優於悄悄產生錯誤資料。
總結
將 Preconditions 作為方法防衛第一道防線,能顯著提升程式碼健壯性與可維護性。建議在專案規範中強制要求公共 API 進入點使用。
- 上一篇文章: Java 資料結構與演算法:三角數列遞歸實作
- 下一篇文章: Java Swing 文本框與文本區輸入輸出完整指南
Copyright ©
程式碼之家 All Rights Reserved