我有一个具有以下签名的地图(多种地图):
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。
答案 0 :(得分:0)
类似于getOrDefault()的Map.class中具有LatestNullable批注,它看起来像Nullable批注(这完全是我的烦恼,如果您要阅读以下内容,唯一的问题是:what is the @RecentlyNonNull annotation?)。
因此,我假设IntelliJ读取了它并立即警告您有可能返回null值,因此认为stream()可能会抛出NullPointerException(由于IntelliJ,映射可能为null),然后建议您使用在地图上检查非null。
奇怪的是(显然在stackoverflow问题中)注释不在Java文档中。