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

时间:2019-04-14 21:40:00

标签: java android-studio dictionary java-8

我有一个具有以下签名的地图(多种地图):

Map<String, Set<String>> motherChildIndex;

如果键在地图中不存在,我希望它返回一个空集(而不是null),所以我偶然发现了getOrDefault方法,该方法应该让我“忽略”无效。

这是我的相关代码:

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()行,我收到警告:

  

方法调用“流”可能会产生“ java.lang.NullPointerException”

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

如果有任何不同,我正在使用Android Studio作为我的IDE。

1 个答案:

答案 0 :(得分:0)

类似于getOrDefault()的Map.class中具有LatestNullable批注,它看起来像Nullable批注(这完全是我的烦恼,如果您要阅读以下内容,唯一的问题是:what is the @RecentlyNonNull annotation?)。

因此,我假设IntelliJ读取了它并立即警告您有可能返回null值,因此认为stream()可能会抛出NullPointerException(由于IntelliJ,映射可能为null),然后建议您使用在地图上检查非null。

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