Java 将null传递给NumberUtils.createLong函数引发异常
我正在尝试使用NumberUtils.createLong函数将字符串转换为Long 如中所述,如果我们传递null值,那么它将返回null。但是,我得到输入字符串“null”的NumberFormatException。下面是我用来调用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("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。@LaveshKarnanicreateLong(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);