簡體   English   中英

java.util.Objects.requireNonNull vs Preconditions.checkNotNull

[英]java.util.Objects.requireNonNull vs Preconditions.checkNotNull

Guava Preconditions的文檔說明:

使用com.google.common項目通常應避免使用Objects.requireNonNull(Object) 相反,使用checkNotNull(Object)Verify.verifyNotNull(Object)中適合的情況。 (對於接收消息的重載也是如此。)

有人可以解釋這個建議的理由嗎?

是為了保持一致性還是Objects.requireNonNull的實現存在根本性的錯誤?

這只是為了保持一致性。 實現是相同的。

雖然從問題中的例子來看,OP似乎是專門詢問checkNotNull的特定形式,但是通常還有一個細微的區別,即支持使用checkNotNull ,這反映在printf樣式的varargs表單中。 例如,使用Guava Preconditions您可以執行以下操作:

public void getInput(String companyName) {
   String context = "Google";
   String moreContext = "Facebook";
   checkNotNull(companyName, "Why not try %s or %s", context, moreContext);
}

使用Objects.requireNonNull你必須做類似的事情

public void getInput(String companyName) {
   String context = "Google";
   String moreContext = "Facebook";
   requireNonNull(companyName, "Why not try " + context + " or " + moreContext);
}

參考:參見前提條件說明的底部部分

簡單,varargs“printf-style”異常消息。 (這個優點也是我們建議繼續在JDK 7中引入的Objects.requireNonNull上使用checkNotNull的原因。)

編輯:有一點需要注意的是,使用String.valueOf(arg)將errorMessageTemplate的所有參數轉換為String,因此您只能使用%s而不能使用%d或%f等其他類型說明符。

暫無
暫無

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

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