В intellij idea отсутствует потенциальное предупреждение npe

Рассмотрим следующий метод:

void foo(Map<String, String> map) {
    String v = map.get("key");
    if (v == null) {}
    System.out.println(v.toUpperCase());
}

IntelliJ (палка застряла в версии 14 из-за стандарта компании) совершенно справедливо предупреждает меня, что v.toUpperCase() может вызвать исключение NullPointerException. Но со следующим кодом, то есть без оператора if, предупреждения нет:

void foo(Map<String, String> map) {
    String v = map.get("key");
    System.out.println(v.toUpperCase());
}

Есть ли какая-то конфигурация, которая останавливает предупреждение о NPE, если я сначала не провожу проверку if? Или это пропущенное предупреждение было «исправлено» в более поздних версиях?

По-прежнему то же самое в последней версии, но я не думаю, что IntelliJ сигнализирует обо всех возможных нулевых ссылках. Я думаю, это происходит только тогда, когда ваш код каким-то образом указывает, что значение может быть нулевым, или если используемые методы имеют аннотации @Nullable.

Robby Cornelissen 11.04.2018 11:54
3
1
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поведение здесь не изменилось в версии 2018.1.

Если вы добавляете нулевую проверку, проверка кода принимает переменную как Nullable и, следовательно, предупреждает вас о дальнейших непроверенных вызовах этой переменной.

Вы можете подавить это с помощью @SuppressWarnings("ConstantConditions")

Другие вопросы по теме