Как избежать `NullPointerExceptions` из` toString` из `hashmap` - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь избежать 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 ...

1 Ответ

1 голос
/ 16 мая 2019

Если вы измените условие с константой влево, вы автоматически проверите его на NULL. Вот так:

if ("it".equals(source_region) && 
region_ids.containsKey("it") && 
!(region_ids.get("it").toString().equals(selected_id))) {
    // Do stuff for mismatched region
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...