Я пытаюсь избежать NullPointerException
в некотором коде, который пытается сравнить со строкой из HashMap
.
HashMap
четко определено, но в HashMap
может быть соответствующая запись, а может и нет, поэтому я считаю, что это может быть из-за моего предупреждения NPE и связанного с ним предупреждения Android Studio.
Мой код:
if (region_ids !=null && source_region != null && selected_id != null) {
if (source_region.equals("it") && region_ids.containsKey("it") && !selected_id.equals(region_ids.get("it").toString())) {
// Do stuff for mismatched region
}
}
Где region_ids
- это HashMap
.
Достаточно ли я делаю, чтобы предотвратить NullPointerException
с?
Если это так, почему Android Studio по-прежнему выдает предупреждение в IDE?
(Обратите внимание, что тег Android-Studio
включен намеренно из-за последней части этого вопроса, относящейся к AS).
Обновление
На основании комментария Code-Apprentice и ответа Носяры у меня теперь есть два следующих варианта оператора if
, но я все еще получаю предупреждение NPE по методу toString()
:
if ( region_ids_string != null && spin_region_id != null && source_region != null && selected_id != null && assoc_ids != null) {
if ( region_ids_string.size() > spin_region_id.getSelectedItemPosition()) {
if (source_region.equals("com_mx") && assoc_ids.get("com_mx") != null && assoc_ids.containsKey("com_mx") && !selected_id.equals(assoc_ids.get("com_mx").toString())) {
return true;
} else if ("com_au".equals(source_region) && assoc_ids.containsKey("com_au") && assoc_ids.get("com_au") != null && !assoc_ids.get("com_au").toString().equals(selected_id)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
Так что я считаю, что сейчас проверяю null
, "" и существует ли Key
в HashMap
, но AS по-прежнему считает, что операторы могут генерировать NPE ...