我正在将检查器框架集成到我们的项目中。我遇到的一个问题是iterating.over.nullable
。我不知道为什么会出现这个错误,因为我在访问列表的元素之前使用CollectionUtils.isEmpty()
验证了列表。
列表项是Nullable
,但据我所知,因为我在访问之前进行了检查,所以它不应该引发错误。如果有人能指出我做错了什么,我将不胜感激。下面是代码。我在第4行得到了错误iterating.over.nullable
。
public List<MyCustomObject> map(Delivery delivery) {
List<MyCustomObject> delList = new ArrayList<>();
if (!CollectionUtils.isEmpty(delivery.getDeliveries())) {
for (MyCustomObject deliveries : delivery.getDeliveries()) {
//Processing code
}
}
return delList;
}
先谢谢你了。
1.尝试使用CollectionUtils.isEmpty,因为它检查列表是否为null或空
2条答案
按热度按时间zfycwa2u1#
空值检查器已经识别出一个真正的问题,最好的解决方案是 not 取消警告。问题可能在您的代码或注解中。
像这样的问题及其解决方案在Checker Framework手册的副作用、确定性、纯度和类型细化一节中进行了讨论。
在
if
测试中,delivery.getDeliveries()
的计算结果为非null和非空值。但是,不能保证for
循环中的第二次调用 * 也 * 计算结果为非null和非空值。因此,在
for
循环中,delivery.getDeliveries()
确实可能为null,并且在运行时可能发生NullPointerException。一种方法是将表达式提取到局部变量中:
另一种方法是将
getDeliveries()
方法声明为@Deterministic
。aiazj4mn2#
if(delivery!= null &&!CollectionUtils.isEmpty(delivery.getDeliveries())){