我正在阅读一些代码,它检查由Map.keySet
返回的值是否为null
。Javadoc没有提及Map.keySet
的返回值。如果Map不包含任何内容,则返回一个空集合。
Map.keySet
的返回值什么情况下会是null
呢?
我正在阅读一些代码,它检查由Map.keySet
返回的值是否为null
。Javadoc没有提及Map.keySet
的返回值。如果Map不包含任何内容,则返回一个空集合。
Map.keySet
的返回值什么情况下会是null
呢?
你所提到的代码作者明显对Map.keySet
方法并不理解。正如你所提到的,Java文档中明确没有说明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的。
Map.keySet
绝不能返回 null
。文档中暗示了 keySet
不应为 null
,因为它的内容“跟随” Map
的内容:
这个 set 是由 map 支持的,所以 map 的更改会反映在 set 中,反之亦然。
如果允许 keySet
返回 null
,则这将是不可能实现的。
Java 中的标准实现 HashMap
和 TreeMap
不会从 keySet
返回 null
。由于 Map
是一个接口,因此可以开发一个错误的实现来返回 null
以代替 keySet
。尽管如此,为这种遥远的可能性编程并不是一个好主意。
Map
来打破这一点。 - AxelHnull
(而不是将可选性嵌入类型系统并由编译器强制执行)。宁愿安全也不要抱有可能发生的空指针异常的侥幸心理... - ThiloMap
实现是哪个?是来自 JDK 还是第三方库? - Andrew Tobilko