Java Sonar Qube说Objects.inNull的计算结果总是错误,导致代码生成失败
出于某种原因,sonar报告(客户端报告)以下Objects.isNull始终计算为false禁用生产升级。有人能帮我理解为什么会发生这种情况,以及如何解决Java Sonar Qube说Objects.inNull的计算结果总是错误,导致代码生成失败,java,spring-data-jpa,sonarqube,Java,Spring Data Jpa,Sonarqube,出于某种原因,sonar报告(客户端报告)以下Objects.isNull始终计算为false禁用生产升级。有人能帮我理解为什么会发生这种情况,以及如何解决 Iterable<Sim> result = repository.findAllById(list); if (Objects.isNull(result)) { // Sonar thinks it always evaluates to false Iterable result=r
Iterable<Sim> result = repository.findAllById(list);
if (Objects.isNull(result)) { // Sonar thinks it always evaluates to false
Iterable result=repository.findAllById(列表);
如果(Objects.isNull(result)){//Sonar认为它的计算结果总是为false
结果
可能为空,但它不会为null
和对象。因此,isNull()
将永远不会返回true
如果在数据库中找不到匹配数据,hasNext()
为Iterator()返回的每个Iterator
返回false
虽然您在技术上能够创建自己的实现,但返回null
可能没有意义
如果您确实想这样做并且有理由这样做,您可以在同一行中添加一个解释它的//NOSONAR
注释,警告将消失。result
可能是空的bot notnull
。因为findAllById
的实现返回一个非空的iterable,其迭代器()如果未找到与listImsi
匹配的项,则始终为空。这被认为是一种很好的做法,因为您可以省略空检查,就像SonarQube正确检测到的那样。@Glains-谢谢,这是否意味着findAllById从不返回空引用?我想您的意思是未说谎的迭代器是空的,而不是Iterable
(它没有hasNext()
方法。另外,为什么//NOSONAR
要保留一个总是false
(因为它只会增加不必要的复杂性)的条件呢?@dan1st,谢谢。所以这是一个更好的选择iterable.iterator().hasNext()?.如果是,则在iterable为null的情况下不会抛出NullPointerException(在这种情况下,将对null引用调用迭代器()是的,这是一个更好的/有效的方法。NPE没有问题,因为它不会像我说的那样为null。我不知道这一点。为什么它从不返回null?你能提供文档吗reference@Rakesh请参阅以获取参考:从不为null
。此外,如果可以为空,则没有理由返回null。为什么要提供不必要的NPE陷阱?