避免从"toString"到"hashmap"中的"NullPoint



我试图避免在某些代码中出现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 中给我警告?

(请注意,由于此问题的最后一部分是特定于 AS 的,因此有意包含Android-Studio标记。


更新

根据代码学徒的评论和Nosyara的回答,我现在对if语句有以下两种变体,但仍然在toString()方法上收到NPE警告:

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

如果向左使用常量反转条件,则会自动检查其是否为 NULL。这样:

if ("it".equals(source_region) && 
region_ids.containsKey("it") && 
!(region_ids.get("it").toString().equals(selected_id))) {
// Do stuff for mismatched region
}

最新更新