我可以使用 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/