#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 .