首页 > 解决方案 > Hashtable 中的 containsKey() 检查后,get() 是否可以为空?

问题描述

我在一个最初以以下方式填充的 android 应用程序中实现了一个 Hashtable:

if(table.containsKey(key)){
    table.get(key).add(item);
}else{
    table.put(key, new ArrayList<Items>());
    table.get(key).add(item);
}

(变量名略有变化)

Android StudioMethod invocation 'add' may produce NullPointerException对这两种添加方法都会发出警告。我以前(也是唯一)对 dict 类型结构的经验来自 Python,这从来都不是问题,但为了安全起见,我想检查一下:这实际上是否有可能抛出 NPE?

干杯

标签: javaandroid-studiohashtable

解决方案


让我们看一下文档Hashtable.get

返回指定键映射到的值,或者null如果此映射不包含该键的映射。

更正式地说,如果此映射包含从键 k 到值 v 的映射(key.equals(k)),则此方法返回 v;否则返回null。(最多可以有一个这样的映射。)

因此,如果 Hashtable 中的一个 KVP 的值为 null,则会在 if 分支中发生 NPE。

containsKey如果为空,put也会抛出 NPE key,因此 NPE 也可能发生在 else 分支中。


推荐阅读