奇数NullPointerException

在冬季

我的NPE的Stacktrace开头为:

Caused by: java.lang.NullPointerException
    at pl.yourvision.crm.web.servlets.listExport.ProductListExport.writeCells(ProductListExport.java:141)

该文件中的行号141为:

Double availablePieces = store != null ? store.getAvailablePieces() : 0.0;

其中store不为null且store.getAvailablePieces()为null。我不明白为什么我要在这里例外。

有任何想法吗?

乔恩·斯基特

我99%确信这是由于条件运算符的行为引起的。我相信您的代码等同于:

double tmp = store != null ? store.getAvailablePieces() : 0.0;
Double availablePieces = tmp;

换句话说,它会将的结果拆箱store.getAvailablePieces()double,然后再装箱到Double如果store.getAvailablePieces()返回null,那的确会导致错误NullPointerException

解决方法是也使第三个操作数Double

Double availablePieces = store != null ? store.getAvailablePieces()
                                       : Double.valueOf(0.0);

现在将没有装箱或拆箱,因此可以store.getAvailablePieces()返回null然后0.0您可能想使用它,但这是另一回事。如果要这样做,可以更改为:

Double tmp = store != null ? store.getAvailablePieces() : null:
double availablePieces = tmp == null ? 0.0 : tmp;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章