我的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] 删除。
我来说两句