首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从地图中获取“空”值

从地图中获取“空”值
EN

Stack Overflow用户
提问于 2021-08-21 19:22:41
回答 4查看 1.5K关注 0票数 1

我有HashMap:

代码语言:javascript
运行
复制
Map<String, Object> second = new HashMap<>(Map.of("timeout", 20, "verbose", null, "host", "test"));

和第二个没有空值的映射。我将它们的.keyset()设置为设置,然后开始解析。当我试图解析它时:

代码语言:javascript
运行
复制
 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了。我明白为什么,但我不明白我怎么能解决这个问题。我看到了类似的帖子,但这对我没有帮助。

代码语言:javascript
运行
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-08-21 19:29:57

Map.of不允许null值。引用Javadoc:

不可修改映射 它们不允许null键和值。使用空键或值创建它们的尝试将导致NullPointerException

相反,您可以直接调用put

代码语言:javascript
运行
复制
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");
票数 2
EN

Stack Overflow用户

发布于 2021-08-21 19:31:45

Map.of既不允许null键,也不允许null值。如果我正确地得到了您的代码,您将最终处理键verbose,它在映射second中有一个null值。

参考资料:

票数 0
EN

Stack Overflow用户

发布于 2021-08-21 19:36:38

基于堆栈跟踪,映射是ImmutableCollections,ImmutableCollections中不支持空值。

https://docs.oracle.com/javase/9/core/creating-immutable-lists-sets-and-maps.htm#JSCOR-GUID-1222F8A3-7EC0-4E49-9B75-C3B263F9A1BB

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68876104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档