【发布时间】:2021-10-05 09:51:43
【问题描述】:
我之前使用 HashMap 从常量映射中获取键。
在 containsKey() 传递 NULL 键 时,我曾经得到 FALSE。
为了让代码看起来更漂亮,我尝试了 java-8。因此,我开始使用 Map.ofEntries 来构建我的地图,而不是 HashMap
令人惊讶的是,当 Null 键被传递给 containsKey() 方法时,我得到 Null Pointer Exception
String str = null;
Map<String,String> hashMap = new HashMap<>();
hashMap.put("k1", "v1");
System.out.print(hashMap.containsKey(str)); // This gives false
Map<String,String> ofEntriesMap = Map.ofEntries( Map.entry("k1", "v1"));
System.out.print(ofEntriesMap.containsKey(str)); // Why this gives Null Pointer Exception ?
我无法弄清楚,为什么它在 Map.ofEntries 的行为有所不同。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
Map实现可以选择是否支持空键和空值。这可能是一个设计缺陷,但它是规范,所以如果你只有Map,你不知道它是否会支持它们。 -
让代码看起来花哨是进行任何更改的糟糕理由,尤其是对于已经工作的代码。让它更清晰或更容易阅读将是另一回事。
标签: java collections java-8 nullpointerexception