[英]Nullsafe Long valueOf
想象以下場景Long critId = Long.valueOf(criteriaIdentifier);
如果視圖最初加載, criteriaIdentifier
可能為空,之后我根據 JSF 視圖中的selectedItem
設置值。
但是, Long.valueOf(criteriaIdentifier)
拋出NumberFormatException
- 如果字符串不能被解析為 long(即null
)。
我想過將 Id 默認設置為 default -1
,但我想知道是否有更好的做法。
PS:從技術上講, criteriaIdentifier
不能是 -1,因為這些值是從數據庫中設置的,使用序列生成器,所以我應該知道 -1 是默認值並正確執行默認操作
您可以使用 Apache Commons 中的NumberUtils
。 它是空安全的,您可以選擇指定默認值。
示例:
NumberUtils.toLong(null) = 0L
NumberUtils.toLong("") = 0L
NumberUtils.toLong("1") = 1L
NumberUtils.toLong(null, 1L) = 1L
NumberUtils.toLong("", 1L) = 1L
NumberUtils.toLong("1", 0L) = 1L
有關更多信息,請查看API 。
我假設criteriaIdentifier 是一個字符串。 您可以使用org.apache.commons.lang3.math.NumberUtils.toLong(String, long)如果 String 參數為空,它會為您提供默認值。 或者您使用org.apache.commons.lang3.math.NumberUtils.toLong(String)如果字符串為空則返回零。
這取決於您的情況,但通常有辦法避免此類問題。
通常將 ID 設置為 -1 是一種常見做法,但我認為這不是一個好的做法。 您知道 -1 在您的場景中不是一個可能的值,但僅考慮 Long 類型,它是一個有效值。 所以在代碼中的任何地方你都需要實現像 if id!=-1
這樣的測試,這使得代碼更難理解,通常null
值更適合這種情況 - 沒有值的長對象。
如果這取決於我,例如在接收 ID 並等待有效 ID 的方法中,如果我得到 null,我會拋出異常並讓方法的調用者處理它。 例如,如果它是一個 Web API(否則為什么你會得到一個字符串?)那么你可以拋出一個 HTTP 錯誤。 或者,如果您想處理錯誤的參數,則最好返回 null 或使用 null 作為默認值。
當我們說 nullSafe 時,我們通常希望在通過它傳遞null
時從 api 接收一個null
,而不是0
或-1
或任何其他值。
為此,請使用org.apache.commons.lang3.math.NumberUtils
createLong
靜態方法。
CAUSION*:如果輸入字符串不為null
且不是數字,則拋出 NumberFormatException。
小心**:從 3.1 開始,它處理十六進制 (0Xhhhh) 和八進制 (0ddd) 符號。 NB 前導零表示八進制; 沒有修剪空格。
樣品:
NumberUtils.createLong(null) --> null
NumberUtils.createLong("1") --> 1
NumberUtils.createLong("hi") --> NumberFormatException
NumberUtils.createLong(" 11") --> NumberFormatException (does not trim)
NumberUtils.createLong("023") --> 19 (leading 0 means octal)
NumberUtils.createLong("0x23") --> 35 (leading 0x means hex)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.