java - 检查方法 "return null"是否为 @Nullable

标签 java null static-analysis findbugs

我可以使用 Findbugs 或任何其他代码分析器来检查可以返回 null 的方法是否被注释为 @Nullable 吗?

我想检查的情况并非如此:

// Third party library
class Foo
{
    // Static test should fail because it's not annotated as @Nullable
    String get()
    {
        return null;
    }
}

最佳答案

我相信当前的工具无法做到这一点,包括 IntelliJ。您必须编写自定义 FindBugs 检查。 FindBugs 有一些逻辑支持空值分析。

原因是您正在尝试对该方法的契约进行逆向工程。空注释是契约的一部分,因此它们不能也不应该从代码中推断出来。即使在理论上,也无法判断程序员是否希望该方法返回 null 值,或者这是否是一个编程错误。根据这一点,您必须通过添加 @Nullable 注释或更改方法主体以使其无法返回 null (并且可能添加 @Nonnull)。

FindBugs 具有一些 annotations您可以使用它在包级别指定 nullness 默认值。然后它将检查该包中类的所有方法是否符合您的默认值。如果您没有这样做,FindBugs 会假设您设置了@Nullable;所以也许你的案子已经解决了。

关于java - 检查方法 "return null"是否为 @Nullable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645627/

相关文章:

java - 奇怪的字节 ArrayList 重写其值

java - 正则表达式模式中的 ANT 属性

java - 找不到 lib 目录中的 Grails JAR 文件

ios - 在展开可选值时,将可选字符串分配给 UITableView 中的 UILabel 以意外发现 nil 结束

sql - 比较空值时的奇怪行为 SQL

ios - NSDateFormatter 不起作用

c# - 这个软件列出当前进程并使用未记录的当前功能写入内存的技巧是什么

java - 在调整大小之前计算调整大小的图像(例如 JPEG)的文件大小

concurrency - 我应该从 FindBugs 中得到什么并发警告?

java - 这个 IntelliJ 检查警告是误报吗?