我们正在使用SonarQube进行静态代码分析。 我们正面临SonarQube发现的以下Bug:
NullPointerException might be thrown as 'evt' is nullable here
以下代码
try {
//business logic
}(Exception e){
throw new MyException("Found issue for event " + evt.getDeatil());
}
因此,为了消除此错误,我们引入了用于空检查的小型内联代码
try {
//business logic
}(Exception e){
throw new MyException("Found issue for event " + evt != null ?
evt.getDeatil() : null);
}
仍然SonarQube在代码更改后显示相同的违规错误。
有人可以帮助我们找到我们在这里缺少的东西吗?
答案 0 :(得分:2)
你有一个错误:
dt <- "2009-12-03"
dt <-as.POSIXct(ymd_hms(paste(dt, c(" 00:00:00"))), tz="UTC", format("%Y-%m-%d %H:%M:%OS"))
dt
[1] NA NA
问题是operators precedence。在throw new MyException("Found issue for event " + evt != null ? evt.getDeatil() : null);
之前评估+
,因此您的代码等于:
?:
仍然可以发生NullPointerException。另外你引入了一个新问题 - 表达式:
String message = "Found issue for event " + evt;
throw new MyException(message != null ? evt.getDeatil() : null);
始终评估为message != null
。
要解决此问题,您必须添加大括号:
true