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.