当前位置:  开发笔记 > 编程语言 > 正文

尝试返回null时的NPE

如何解决《尝试返回null时的NPE》经验,为你挑选了1个好方法。



1> T.J. Crowder..:

这非常微妙.Float.parseFloat回报float,而不是Float.条件运算符的后两个操作数必须是相同的类型,但是你给它float(结果Float.parseFloat)和Float(def).编译器选择float因为Float可以float通过自动拆箱强制执行.

所以编译器输出的内容就像你写的那样:

private static Float toFloat(Float def, String str) {
    try {
        return str != null ? Float.parseFloat(str) : def.floatValue();
        // Note ----------------------------------------^^^^^^^^^^^^^
    } catch (NumberFormatException e) {
        return def;
    }
}

......,当然,叫floatValuenull抛出NPE.

您可以通过确保第二个操作数的类型是解决它Float,而不是float.有很多方法可以做到这一点,但正如Zefick所指出的那样,最简单的方法是Float.valueOf(String):

private static Float toFloat(Float def, String str) {
    try {
        return str != null ? Float.valueOf(str) : def;
    } catch (NumberFormatException e) {
        return def;
    }
}


Float.valueOf(STR)
为清楚起见,我的建议是摆脱`?`运算符并使用简单的`if`.是的,你还有一些代码.但它也更容易理解正在发生的事情,而解析并立即回到资本浮动会让我想到"那时我做的是什么......"几个月之后...... :) - 那么`valueOf`当然是最简单的方法......呃!
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有