当前位置: 首页 > 知识库问答 >
问题:

SonarQube无法理解用于null检查的Java内联表达式

魏刚豪
2023-03-14

我们正在使用SonarQube进行静态代码分析。我们面临着SonarQube发现的以下错误

NullPointerException might be thrown as 'evt' is nullable here

在以下代码中

try {
//business logic

}(Exception e){
    throw new MyException("Found issue for event " + evt.getDeatil());
}

为了消除这个bug,我们引入了用于null检查的小型内联代码

try {
//business logic

 }(Exception e){
     throw new MyException("Found issue for event " + evt != null ?
       evt.getDeatil() : null);
}

代码更改后,SonarQube仍然显示相同的违规错误。

有谁能帮我们找到我们这里缺少的东西吗?

共有1个答案

东郭和光
2023-03-14

行中有错误:

throw new MyException("Found issue for event " + evt != null ? evt.getDeatil() : null);

问题是运算符优先<代码>在之前计算: 因此您的代码等于:

String message = "Found issue for event " + evt;
throw new MyException(message != null ? evt.getDeatil() : null);

NullPointerException仍然可能发生。另外,您引入了一个新问题-表达式:

message != null

始终计算为true

要修复它,您必须添加花括号:

throw new MyException("Found issue for event " + (evt != null ? evt.getDeatil() : null));

 类似资料:
  • 问题内容: 请查看此表达语言 即使地图为null,也会应用样式。 所以我改为 即使这样,也正在得到应用。 如果地图是我不想应用任何样式。 有什么帮助吗?以及这种行为的原因? 问题答案: 使用(检查空性和空性)并使用括号将嵌套的三元表达式分组(EL在某些实现/版本中,即嵌套三元表达式有些问题)。因此,这样: 如果仍然徒劳(我将检查JBoss EL配置),请使用“常规” EL方法: 更新 :根据评论,

  • 问题内容: 在Xcode中编译项目时出现错误,它说: 表达过于复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式 这是代码: 问题答案: 为什么不通过将表达式分解为两个子表达式来降低编译器的复杂性? 您也可以使用(或更多的“ Swifty” 或)来提高可读性。如果我记得,它是标头中定义的无符号32位Integer最大值的十六进制值。

  • 问题内容: 尝试在模板中合并多个值时遇到问题。根据Thymeleaf的说法,我应该可以将它们+一起组合在一起… 4.6合并文本 文本,无论它们是文字还是评估变量或消息表达式的结果,都可以使用+运算符轻松连接: 这是我发现有效的示例: 但是,这不是: 从逻辑上讲,这应该可以,但是不能,我在做什么错? Maven: 这是我设置TemplateEngine和TemplateResolver的方法: Th

  • 问题内容: 我需要在这些公式中为书籍[i]创建一个空检查,并且我不完全确定如何进行此操作,因为我对空检查并不十分熟悉,并且在编程方面还很陌生。任何帮助都将不胜感激! 问题答案: 首先,您应该检查自身是否不为null,然后简单地检查是否:

  • 检查d1是否正确的最佳方法是什么。getDept()和d2。在进行比较之前,getDept()在以下lambda中是否为null?空检查应该在集合之前完成吗。sort()还是可以在lambda语句中完成? 我需要确保在尝试按部门排序之前,每个对象的部门数据不为空。

  • 本文向大家介绍thinkPHP的表达式查询用法详解,包括了thinkPHP的表达式查询用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP的表达式查询。分享给大家供大家参考,具体如下: ThinkPHP 表达式 这里说的表达式,是指 ThinkPHP 框架中特有的表达式。这些表达式用于查询或更新删除等操作的 where条件 及模板标签中。 Where 条件中使用表达式