我正在努力使我的Java代码与null注释保持一致,我想澄清我的方法在如何处理方面是否正确
Map.getOrDefault()
其中我希望将结果注释为
@NotNull
.
我想从给定键或空的映射中获得一个非null值
List
对象的SDK规范
getOrDefault()
指示它可能返回null。我想在不关闭的情况下,尽可能简单地解决零安全警告。
我提出了这个解决方案,它没有依赖项,并且很好地封装了方法调用。这是抑制此警告以及保证得到非null结果的最简单方法吗?
在这种情况下,我无法控制
Map
,所以我不能保证空键是有效的还是无效的。因此,我必须考虑这两种情况。
// Not annotated and may return null if key is null and there is no mapping for it (not what I want)
List<String> value = m.getOrDefault(key, new ArrayList<>());
// Null type mismatch; Map.getOrDefault() can be null!
@NotNull List<String> value = m.getOrDefault(key, new ArrayList<>());
// Guaranteed to return non-null result and handles null type safely
@NotNull List<String> value = Objects.requireNonNullElse(m.getOrDefault(key, null),new ArrayList<>());