我正在尝试避免在某些代码中尝试与来自NullPointerException
的字符串进行比较的HashMap
。
HashMap
的定义很明确,但是HashMap
中可能有也可能没有相应的条目,因此我相信这可能是我的NPE和相关的Android Studio警告的来源。 / p>
我的代码是:
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
标签。)
更新
基于Code-Apprentice的评论和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 ...
答案 0 :(得分:1)
如果使用左侧的常数反转条件,则将自动检查它是否为NULL。像这样:
if ("it".equals(source_region) &&
region_ids.containsKey("it") &&
!(region_ids.get("it").toString().equals(selected_id))) {
// Do stuff for mismatched region
}