【发布时间】:2015-02-13 14:02:24
【问题描述】:
我正在编写一个程序,它需要处理带有许多包装数字变量(例如 Long、Double、Integer 等)的对象。我如何安全地对这些变量执行数字运算而不必在任何地方进行空检查 em>?
我预计这是几乎每个 Java 程序员迟早都必须处理的事情,所以我很惊讶没有数百篇关于该主题的博客文章和 SO 问题。
我目前的解决方案是通过以下方法过滤所有数字:
private static safelyUnbox(Integer i) {
return i == null ? 0 : i.intValue();
}
...
sumVariable += safelyUnbox(stupidObject.getNumberOfWhatever());
【问题讨论】:
-
为什么需要空检查?
-
另外,为什么返回
0比抛出 NPE 更安全?如果集合应该没有空值,那么这种装置将隐藏您的实际错误。得到一个 NPE 错误比给用户一个只有似乎有效的答案要好得多。 -
为什么不能使用原语?
-
@Boann:在相加数字时避免 nullPointerExceptions。它们是可选的,因此它们通常是
null。 -
@barq:因为这些值是可选的,可以为空。很遗憾,我无法更改相关对象。
标签: java nullpointerexception primitive autoboxing