将 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 值不相似的文本的情况。
我正在尝试使用 NumberUtils.createLong 函数将 String 转换为 Long。
如 Doc 中所述,如果我们传递空值,那么它将 return 为空。但是我得到了输入字符串 "null" 的 NumberFormatException。下面是我用来调用 createLong 函数的代码片段。
NumberUtils.createLong("null") and
NumberUtils.createLong(null)
请帮我解决这个异常。
谢谢。
您通过将字符串用双引号括起来来发送空字符串。改为发送 null。
文档说
Returns
null
if the string isnull
你没有通过 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 值不相似的文本的情况。