gpt4 book ai didi

java - FIndbug 未识别空指针异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:04 25 4
gpt4 key购买 nike

我正在使用与 Eclipse 集成的 Findbugs。

当我在我的项目上运行 findbugs 时,由于可能的空指针异常而未捕获以下代码。

在下面的代码片段中,对象测试容易出现 findbugs 无法识别的空指针异常。

@Override
public boolean saveIrr(TestObject test) throws DuplicateRecordException {
boolean status = false
try {
test.getAddDate();
status = adhocMaintPopupMapper.saveIrr(IRRPopupMaint);
} catch (DataIntegrityViolationException e) {
logger.error("Error in Saving!", e);
throw new TransactionDataException("Error in Saving!", e);
}
return status;
}

是否需要进行任何配置更改才能使 findbugs 识别此问题?

最佳答案

如果您将 @Nonnull 添加到参数声明中,FindBugs 将突出显示您传递的值未检查是否为 null 的任何位置。如果您将其标记为 @CheckForNull,FindBugs 将突出显示您访问它的方法中的任何位置,而不检查是否为 null

你做什么取决于方法的契约:它是否容忍 null 或不?查看它的实现,它不允许 null 不抛出意外异常。因此,test 应该标记为 @Nonnull,这样您就可以发现不正确的调用。

更新

FindBugs 将检查用@Nonnull@CheckForNull 注释的字段、参数、方法返回值。任何没有注释的东西都被假定为 @Nullable,这告诉 FindBugs 忽略它。

public boolean saveIrr(@Nonnull TestObject test) { ... }

public void dontCareAboutNull(TestObject value) {
saveIrr(value); // no bug
}

public void mightBeNull(@CheckForNull TestObject value) {
saveIrr(value); // bug
}

因此,我们将 @Nonnull 应用于包级别的所有三种类型的值。任何需要允许 null 的值都必须用 @CheckForNull 注释。我们不允许使用 @Nullable 除非在极少数极端情况下(例如 Spring 强制执行的 @Autowired 字段)。

关于java - FIndbug 未识别空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com