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