我目前在Eclipse和IntelliJ上都遇到过null分析问题,他们不了解处理空指针异常的一段代码。基本上我得到了以下方法:
@Nullable
public static <T> T getValueOrNull(Supplier<T> resolver) {
try {
T result = resolver.get();
return Optional.ofNullable(result).orElse(null);
} catch (NullPointerException e) {
return null;
}
}
通常我不会捕获那些类型的异常但是在项目中我正在使用这种方法使事情更具可读性。 它被称为这样:
getValueOrNull(() -> obj.getObj2().getObj3()...getObjN())
此调用返回值,如果链中的任何内容为null,则返回null。 问题是null分析会在调用方法时抱怨可能的空指针异常。虽然它们中的任何一个都可能为null,但该方法正在处理该错误。有没有办法可以跳过方法参数的空分析或帮助分析仪了解发生了什么?
似乎即使是一个非常简单的测试,其中捕获空指针异常仍然会在try块内标记潜在的null问题。这让我觉得分析器从未考虑过try catch块。
此外,我知道还有其他方法可以执行此操作,例如下面的代码,但如果可能的话,我希望能够使用我们当前正在执行的操作,因为它具有可读性。即使下面的代码也存在上述IDE的空分析问题。
Optional.ofNullable(objectA)
.map(a -> a.getObjectB())
.map(b -> b.getObjectC())
.map(c -> c.getObjectD())
.map(d -> d.getObjectE())
.map(e -> e.getName())
.orElse("");