奇数NullPointerException

zim*_*imi 6 java

我的NPE的Stacktrace开始于:

Caused by: java.lang.NullPointerException
    at pl.yourvision.crm.web.servlets.listExport.ProductListExport.writeCells(ProductListExport.java:141)
Run Code Online (Sandbox Code Playgroud)

此文件中的第141行是:

Double availablePieces = store != null ? store.getAvailablePieces() : 0.0;
Run Code Online (Sandbox Code Playgroud)

store不为null且store.getAvailablePieces()为null.我不明白为什么我在这里得到例外.

有任何想法吗?

Jon*_*eet 19

我99%肯定这是因为条件运算符的行为.我相信你的代码相当于:

double tmp = store != null ? store.getAvailablePieces() : 0.0;
Double availablePieces = tmp;
Run Code Online (Sandbox Code Playgroud)

换句话说,它是拆箱的结果store.getAvailablePieces()double,然后拳击回Double.如果store.getAvailablePieces()返回null,那确实会导致NullPointerException.

解决方法是创建第三个操作数Double:

Double availablePieces = store != null ? store.getAvailablePieces()
                                       : Double.valueOf(0.0);
Run Code Online (Sandbox Code Playgroud)

现在不会有任何拳击或拆箱,所以store.getAvailablePieces()返回是没关系的null.您可能希望使用0.0,但这是另一回事.如果你打算这样做,你可以改为:

Double tmp = store != null ? store.getAvailablePieces() : null:
double availablePieces = tmp == null ? 0.0 : tmp;
Run Code Online (Sandbox Code Playgroud)

  • @RJ:不完全确定,但我已将其更改为现在明确使用Double.valueOf :) (2认同)
  • @Obalix:你的编辑显着改变了帖子的*lot*的含义."Double"和"double"之间的区别是至关重要的 - 唯一需要修复的拼写错误是在某些文本的中间(我认为是"Dobule").我已经回滚了你的编辑. (2认同)