我正在读一些检查Map.keySet返回的值是否为null的代码。javadoc没有说明任何关于Map.keySet返回值的内容。如果Map不包含任何内容,则它是一个空集。
Map.keySet返回的值何时可以为null
发布于 2018-05-07 18:11:25
这绝对是因为你所提到的代码的作者对Map.keySet缺乏理解。正如您已经提到的,java文档并没有明确声明keySet方法将返回null。
作为示例,我刚刚查看了keySet方法的HashMap实现,它的定义如下:
public Set<K> keySet() {
Set<K> ks = keySet;
if (ks == null) {
ks = new KeySet();
keySet = ks;
}
return ks;
}因此,正如您所看到的,从该方法返回的值永远不会为空。
我还检查了keySet方法的其他几个实现,例如TreeMap、ConcurrentHashMap等,但没有找到任何返回null的实现。
发布于 2018-05-07 18:09:14
Map.keySet永远不应该返回null。文档中暗示keySet永远不能为null,因为它的内容“跟踪”Map的内容
该集由贴图支持,因此对贴图的更改会反映在该集内,反之亦然。
如果允许keySet返回null,这是不可能实现的。
在Java、HashMap和TreeMap中,Map的标准实现不从keySet返回null。由于Map是一个接口,因此可能会开发一个不正确的实现,从而为keySet返回null。然而,针对这种极小的可能性进行编程并不是一个好主意。
https://stackoverflow.com/questions/50211524
复制相似问题