从地图中获取 "null" 值
Getting "null" value from map
我有 HashMap:
Map<String, Object> second = new HashMap<>(Map.of("timeout", 20, "verbose", null, "host", "test"));
第二张地图没有空值。我将他们的 .keyset() 设置为 Set 然后开始解析。
当我试图解析它时:
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)
Map.of
不允许 null
值。引用 Javadoc:
Unmodifiable Maps
They disallow null
keys and values. Attempts to create them with null keys or values result in 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");
Map.of
不允许 null
键和 null
值。如果我得到你的代码正确,你最终会处理在你的地图 second
.
中有一个 null
值的键 verbose
参考文献:
根据堆栈跟踪,映射是 ImmutableCollections,ImmutableCollections 不支持空值。
Map.of() 和 Map.ofEntries() 静态工厂方法提供了一种创建不可变映射的便捷方法。这些方法创建的Map实例具有以下特点:
...
他们不允许空键和值。尝试使用空键或空值创建它们会导致 NullPointerException。
我有 HashMap:
Map<String, Object> second = new HashMap<>(Map.of("timeout", 20, "verbose", null, "host", "test"));
第二张地图没有空值。我将他们的 .keyset() 设置为 Set 然后开始解析。 当我试图解析它时:
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)
Map.of
不允许 null
值。引用 Javadoc:
Unmodifiable Maps
They disallownull
keys and values. Attempts to create them with null keys or values result inNullPointerException
.
相反,您可以直接调用 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");
Map.of
不允许 null
键和 null
值。如果我得到你的代码正确,你最终会处理在你的地图 second
.
null
值的键 verbose
参考文献:
根据堆栈跟踪,映射是 ImmutableCollections,ImmutableCollections 不支持空值。
Map.of() 和 Map.ofEntries() 静态工厂方法提供了一种创建不可变映射的便捷方法。这些方法创建的Map实例具有以下特点:
... 他们不允许空键和值。尝试使用空键或空值创建它们会导致 NullPointerException。