![](/img/trans.png)
[英]On upgrading Guava to the latest 23.5 getting NoSuchMethodError for Preconditions.checkArgument
[英]Guava preconditions checkNull, checkArgument
我想檢查基類上的前提條件,以便知道子類型將始終使用有效的構造函數參數。
讓我們以一個構造器為例:
在這種情況下,如何最好地使用番石榴前提條件方法?
在這樣的模擬示例中:(這是人為的!)
protected AbstractException(String errorMessage, Throwable errorCause) {
super(errorMessage, errorCause);
checkNotNull(errorMessage,
ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK, "errorMessage");
checkArgument(!errorMessage.isEmpty(),
ErrorMessage.MethodArgument.CANNOT_BE_EMPTY_STRING_CHECK,
"errorMessage");
checkNotNull(errorCause, ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,
"errorCause");
}
我最終在檢查參數之前調用了super
,因為對super
的調用需要是方法的第一行,盡管我可以做super(checkNoNull(errorMessage))
,但是我不能使用checkArgument
進行相同的包裝,因為這會返回void
。 因此,難題是:
checkStringNotNullAndNotEmpty()
一樣“分組”檢查 我使用外觀怪異的ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,因為默認throw
不包含錯誤消息,因此從測試方面,我無法將其識別為參數驗證失敗,而不是“任何” NPE?
我做錯了嗎?
這本來應該是一個評論,但是太長了。
super
是無害的。 更重要的是:您拋出的異常可能不如沒有所有檢查的異常。 假設用戶提供了原因,但沒有消息。 您認為這很糟糕,但是您可以使用沒有任何原因的NPE替換它。 更糟
查看Guava的Preconditions.format
(私有包)。 他們可以先檢查正確數量的參數,但不能。 您可以提供太少或太多,這是一個錯誤,但忽略它是處理它的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.