gpt4 book ai didi

java - 为什么 Map.getOrDefault() 会警告 NullPointerException?

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:39 26 4
gpt4 key购买 nike

我有一个带有以下签名的 map (某种多 map ):

Map<String, Set<String>> motherChildIndex;

如果映射中不存在该键,我希望它返回一个空集(而不是 null),因此我偶然发现了 getOrDefault 方法,该方法应该允许我有效地“忽略”null。

这是我的相关代码:

motherChildIndex
.getOrDefault(personId, Collections.emptySet()) //personId is just a string that may or may not be in the map, hence getOrDefault
.stream() //I get the warning here
.map(personsIndex::get) //Not important to reproduce
.forEach(children::add); //Not important to reproduce

.stream() 行上,我收到警告:

Method invocation 'stream' may produce 'java.lang.NullPointerException'

为什么?我认为 getOrDefault() 应该永远不会返回 null。

我正在使用 Android Studio 作为我的 IDE,如果这有什么区别的话。

最佳答案

看起来 getOrDefault() 在Map.class中有RecentlyNullable注释,它看起来像Nullable注释(这完全是我的解释,如果您想阅读的话,关于此事的唯一问题是: what is the @RecentlyNonNull annotation? )。

因此,我假设 IntelliJ 读取它并立即警告您可能会返回 null 值,因此认为 Stream() 可能会抛出 NullPointerException (因为对于 IntelliJ 来说,映射可以为 null),然后建议您对映射进行非空检查。

奇怪的是(就像在 stackoverflow 问题中一样)注释显然不在 Java 文档中。

关于java - 为什么 Map.getOrDefault() 会警告 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com