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