将 null 传递给 NumberUtils.createLong 函数抛出异常

Passing null to NumberUtils.createLong function throwing Exception

我正在尝试使用 NumberUtils.createLong 函数将 String 转换为 Long。

Doc 中所述,如果我们传递空值,那么它将 return 为空。但是我得到了输入字符串 "null" 的 NumberFormatException。下面是我用来调用 createLong 函数的代码片段。

NumberUtils.createLong("null") and
NumberUtils.createLong(null)

请帮我解决这个异常。

谢谢。

您通过将字符串用双引号括起来来发送空字符串。改为发送 null。

文档说

Returns null if the string is null

你没有通过 null,你通过了 "null"。那是完全不同的事情。

String s = "null";
System.out.println(s == null);   // false
System.out.println(s.length());  // 4

String t = null;
System.out.println(t == null);   // true
System.out.println(t.length());  // NullPointerException.
NumberUtils.createLong("null")

失败,因为 "null" 不像 "0" 那样类似于数字。

NumberUtils.createLong(null)

如果 失败,API 设计者希望您自行决定如何处理空值。这是一个很好的决定,因为关于空值的隐式假设往往会导致很多麻烦并且很难找到错误。

自己做决定,例如:

final Long x;
if (numberAsString == null)
  x = 0; // or null, although I'd see this as bad style.
else
  x = NumberUtil.createLong(numberAsString);

此示例不处理 numberAsString 包含任何与实际 long 值不相似的文本的情况。