Sonar:由于被调用方法的 return 值,可能会取消引用空指针
Sonar: Possible null pointer dereference due to return value of called method
我从 Sonar 收到问题:“样式 - 由于被调用方法的 return 值,可能会取消引用空指针。findbugs:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE。
问题在 lockUntil.after(new Date());
try {
String sql = "select lock_until from shedlock where NAME=?";
Timestamp lockUntil = jdbcTemplate.queryForObject(sql, new Object[] {taskname}, Timestamp.class);
return lockUntil.after(new Date()); //issue line
} catch (EmptyResultDataAccessException e){
LOGGER.info("Checking shedlock for locked task[" + taskname + "]. No task exists. Exception: " + e.getLocalizedMessage());
return false;
}
我已尝试通过
更改此问题行
Date date = new Date();
return lockUntil.after(date);
或
Date date = new Date();
if(date != null)
return lockUntil.after(date);
else
return false; -> this line is dead end
但它引入了其他问题。
谁能指导一下吗?
假设 new Date()
永远不会 return null
应该是一个有效的假设。我的猜测是 Sonar 抱怨的 null
值可能是 lockUntil
。我假设如果查询不匹配任何行,queryForObject
将 return null
,所以你会收到关于使用 lockUntil
的投诉而不首先检查是否它是 null
.
我从 Sonar 收到问题:“样式 - 由于被调用方法的 return 值,可能会取消引用空指针。findbugs:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE。 问题在 lockUntil.after(new Date());
try {
String sql = "select lock_until from shedlock where NAME=?";
Timestamp lockUntil = jdbcTemplate.queryForObject(sql, new Object[] {taskname}, Timestamp.class);
return lockUntil.after(new Date()); //issue line
} catch (EmptyResultDataAccessException e){
LOGGER.info("Checking shedlock for locked task[" + taskname + "]. No task exists. Exception: " + e.getLocalizedMessage());
return false;
}
我已尝试通过
更改此问题行Date date = new Date();
return lockUntil.after(date);
或
Date date = new Date();
if(date != null)
return lockUntil.after(date);
else
return false; -> this line is dead end
但它引入了其他问题。
谁能指导一下吗?
假设 new Date()
永远不会 return null
应该是一个有效的假设。我的猜测是 Sonar 抱怨的 null
值可能是 lockUntil
。我假设如果查询不匹配任何行,queryForObject
将 return null
,所以你会收到关于使用 lockUntil
的投诉而不首先检查是否它是 null
.