java - 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?
干杯
解决方案
让我们看一下文档Hashtable.get
:
返回指定键映射到的值,或者
null
如果此映射不包含该键的映射。更正式地说,如果此映射包含从键 k 到值 v 的映射
(key.equals(k))
,则此方法返回 v;否则返回null。(最多可以有一个这样的映射。)
因此,如果 Hashtable 中的一个 KVP 的值为 null,则会在 if 分支中发生 NPE。
containsKey
如果为空,put
也会抛出 NPE key
,因此 NPE 也可能发生在 else 分支中。
推荐阅读
- python - 使用 Tensorflow 2 沿 y 轴绘制 2D 视频文件的 1D 图
- javascript - 尝试使用 next-auth 登录时 ECONNREFUSED 127.0.0.1:80
- javascript - 在 ReactJS 中导出 Object.prototype.functions
- python - 在 Pycharm 中更新正在开发的模块
- javascript - Axios 完成事件
- python - 使用python将最近添加的.csv文件列表获取到目录中
- android-studio - Flutter“入口点不在当前项目中。” Android Studio 上的错误
- python-3.x - 我如何要求用户输入并根据该输入要求以下输入
- python - 关于在 Python 中安装 rasterframes 模块
- java - Akka 和用 Future 观察变量