Java 将null传递给NumberUtils.createLong函数引发异常

Java 将null传递给NumberUtils.createLong函数引发异常,java,string,long-integer,Java,String,Long Integer,我正在尝试使用NumberUtils.createLong函数将字符串转换为Long 如中所述,如果我们传递null值,那么它将返回null。但是,我得到输入字符串“null”的NumberFormatException。下面是我用来调用createLong函数的代码片段 NumberUtils.createLong("null") and NumberUtils.createLong(null) 请帮助我修复此异常 谢谢。您将字符串null括在双引号中发送。改为发送null 文件上说 如果字

我正在尝试使用NumberUtils.createLong函数将字符串转换为Long

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

NumberUtils.createLong("null") and
NumberUtils.createLong(null)
请帮助我修复此异常


谢谢。

您将字符串null括在双引号中发送。改为发送null

文件上说

如果字符串为
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.
失败,因为
“null”
不像
“0”
那样与数字相似

NumberUtils.createLong(null)
如果失败,API设计者希望您自行决定如何处理空值。这是一个很好的决定,因为关于空值的隐式假设往往会带来很多麻烦,并且很难找到bug

自己做决定,例如:

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

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

null
“null”
不是一回事。这就是为什么会出现异常的原因。@FedericoklezCulloca我甚至试过numberrutils.createLong(null),但也没有worked@LaveshKarnani因为null不是数字。它什么都不是,甚至不是零。通常,尽可能避免
null
(请参阅:
可选)
null
是邪恶的。@Amadán,但是
createLong
接受字符串,字符串也可以为null。@LaveshKarnani
createLong(null)
抛出异常意味着:该方法不接受null。简单明了。这种方法是非常好的风格。显然,API迫使您自行决定如何处理空值。我已经尝试过在不带引号的情况下传递空值,但它不起作用。我以前甚至尝试过使用
NumberUtils.createLong(null)
,但它也抛出了numberFormatException。@LaveshKarnani请提供一个示例来说明这一点。例如,我怀疑您在将代码更改为使用
null
后没有重新编译代码。
final Long x;
if (numberAsString == null)
  x = 0; // or null, although I'd see this as bad style.
else
  x = NumberUtil.createLong(numberAsString);