奇数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;