首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Google Guava Preconditions 參數檢查最佳實踐

     編輯:Java 相關知識

為什麼需要 Preconditions?

在方法進入點驗證參數合法性,是防禦性程式設計的核心。Java 原生 assert 在生產環境預設關閉,且缺乏豐富的錯誤訊息格式化。Guava Preconditions 提供:

  • 運行時始終啟用,不受編譯旗標影響。
  • 支援格式化錯誤訊息(類似 String.format)。
  • 堆疊追蹤清晰,易於定位呼叫處。
  • 語義化方法名,程式碼可讀性高。

常用方法速查

程式碼範例

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 進入點使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法用途拋出異常
checkArgument(boolean)驗證參數邏輯條件IllegalArgumentException
checkNotNull(T)驗證非 nullNullPointerException
checkState(boolean)驗證物件狀態IllegalStateException
checkElementIndex/PositionIndex驗證索引邊界IndexOutOfBoundsException