Sonar: возможное разыменование нулевого указателя из-за возвращаемого значения вызываемого метода

#java #sonarqube

#java #sonarqube

Вопрос:

Я получаю проблему от Sonar: «Стиль — возможное разыменование нулевого указателя из-за возвращаемого значения вызываемого метода. ошибки поиска: NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE. проблема в lockUntil.after(новая дата ());

 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
 

Но это создает другие проблемы.

Кто-нибудь может подсказать?

Ответ №1:

Предположение, что new Date() это никогда не вернется null , должно быть допустимым предположением. Я предполагаю, что возможное null значение, на которое жалуется Sonar, является lockUntil . Я предполагаю, что queryForObject это вернется null , если запрос не соответствует ни одной строке, поэтому имеет смысл, что вы получите жалобу на использование lockUntil без предварительной проверки, если это так null .

Комментарии:

1. Я также пробовал if(lockUntil != null) { LOGGER.info («Проверка блокировки для заблокированной задачи[» taskname «] Lock_until[» lockUntil «]»); возвращает lockUntil.after(новая дата()); } else возвращает false; но это приводит к другим проблемам. Я что-то пропустил?

2. Вы должны поместить этот комментарий в свой вопрос. Вы также можете объяснить, что это за «другие проблемы». Смогли ли вы подтвердить, что это было lockUntil то, на что он жаловался?

3. Стив, теперь я исправил проблему, добавив их оба, date и lockUntil .