我有HashMap:
Map<String, Object> second = new HashMap<>(Map.of("timeout", 20, "verbose", null, "host", "test"));和第二个没有空值的映射。我将它们的.keyset()设置为设置,然后开始解析。当我试图解析它时:
if (firstMap.containsKey(s) && secondMap.containsKey(s) && !Objects.equals(firstMap.get(s), secondMap.get(s))) {
diffList.add(Map.of(s, "changed", "oldValue", firstMap.get(s), "newValue", secondMap.get(s)));
}我拿到NPE了。我明白为什么,但我不明白我怎么能解决这个问题。我看到了类似的帖子,但这对我没有帮助。
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.ImmutableCollections$MapN.<init>(ImmutableCollections.java:1186)
at java.base/java.util.Map.of(Map.java:1351)
at com.company.Main.main(Main.java:13)发布于 2021-08-21 19:29:57
Map.of不允许null值。引用Javadoc:
不可修改映射 它们不允许
null键和值。使用空键或值创建它们的尝试将导致NullPointerException。
相反,您可以直接调用put。
Map<String, Object> second = new HashMap<>(); // `HashMap` permits null values and null key.
second.put("timeout", 20);
second.put("verbose", null);
second.put("host", "test");发布于 2021-08-21 19:31:45
Map.of既不允许null键,也不允许null值。如果我正确地得到了您的代码,您将最终处理键verbose,它在映射second中有一个null值。
参考资料:
发布于 2021-08-21 19:36:38
基于堆栈跟踪,映射是ImmutableCollections,ImmutableCollections中不支持空值。
https://stackoverflow.com/questions/68876104
复制相似问题