我正在阅读一些代码,用于检查Map.keySet
返回的值是否为null
。 javadoc没有说明Map.keySet
的返回值。如果地图不包含任何内容,则为空集。
Map.keySet
返回的值何时可以null
?
答案 0 :(得分:3)
这绝对是您所指代码的作者对Map.keySet
缺乏了解。正如您所提到的,java doc明确没有声明keySet
方法将返回null
。
举个例子,我刚看了HashMap
方法的keySet
实现,它定义为:
public Set<K> keySet() {
Set<K> ks = keySet;
if (ks == null) {
ks = new KeySet();
keySet = ks;
}
return ks;
}
因此,正如您所看到的,从方法返回的值永远不会为空。
我还检查了keySet
方法的其他几个实现,例如对于TreeMap
,ConcurrentHashMap
等,但找不到任何会返回null的内容。
答案 1 :(得分:2)
Map.keySet
永远不应该返回null
。文档中隐含keySet
绝不能null
,因为其内容&#34;跟踪&#34; Map
的内容:
集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。
如果keySet
被允许返回null
,则无法实现。
Java中Map
的标准实现HashMap
和TreeMap
不会从null
返回keySet
。由于Map
是一个接口,因此可能会针对null
返回keySet
的错误实现。但是,为这种远程可能性编程并不是一个好主意。