代码之家  ›  专栏  ›  技术社区  ›  Zhro

符合Null注释的Map.getOrDefault(),其中结果不为Null

  •  1
  • Zhro  · 技术社区  · 4 年前

    我正在努力使我的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<>());
    
    0 回复  |  直到 4 年前