簡體   English   中英

番石榴驗證的目的是什么?

[英]What is the purpose of Guava's Verify?

當我們有com.google.common.base.Preconditions時, com.google.common.base.Verify的目的是什么?

Verify類看起來不錯,但它有一個@Beta注釋,我應該使用它嗎?

Torquestomp的答案是錯誤的(盡管它的時間可能是正確的,但我不知道)。 請參閱gauva的wiki條目: 條件失敗的種類

前提

前置條件檢查確保公共方法的調用者遵守方法規范的要求。 例如,sqrt函數可能只接受非負參數。

驗證

如果您對自己使用的API缺乏高信度將滿足其(實際或隱含)規范,則會使用驗證檢查。 最容易理解這種類型的檢查“就像幾乎所有方面的斷言一樣,但必須在生產中保持啟用狀態。”

不要過分擔心。 來自guava API文檔:

在某些情況下,[前提條件和驗證]之間的差異可能很微妙。 當不清楚使用哪種方法時, 不要過於擔心 ; 只需選擇一些看似合理的東西就可以了。

區別在於語義。 驗證用於確保不變量不會發生變化,已設計為執行某項操作的代碼實際上正在執行該操作。 在精神上:

int x = divide(10, 5);
Verify.verify(x == 2, "X should be 2");

另一方面,當錯誤的輸入傳遞到程序的某個部分時,前提條件會失敗,通常是從用戶到代碼,或從客戶端代碼傳遞到另一個庫中的代碼。 在精神上:

public int divide(int x, int y) {
  Preconditions.checkArgument(y != 0, "Can't divide by 0!");
  return x / y;
}

至於你是否應該使用@Beta類,這完全取決於你正在構建的應用程序的范圍和可預見的生命周期,並且單獨詢問,可能會被標記為“主要基於意見”的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM