有没有办法让Intellij警告我这段代码可能会导致NullPointerException?

Dan*_*lan 7 java intellij-idea nullpointerexception

有没有办法让Intellij警告我这可能会导致NullPointerException?

URL resource = Main.class.getResource("blah/ha");
System.out.println(resource.getAuthority());  //potential NPE here
Run Code Online (Sandbox Code Playgroud)

Intellij非常善于警告我正在做的蠢事.有没有办法可以在这里警告我潜在的NPE?

请注意,getResources它上面没有任何null/notnull注释.至少在JDK 1.7中不是我正在使用的.

Voj*_*cka 5

Intellij IDEA可以检测@Nullable和@NotNull注释在哪里合适并自动插入它们。这可以通过以下方式完成

\n\n
\n

分析 -> 推断无效

\n
\n\n

通过这种方式,您可以自动将这些注释添加到当前文件、未提交的文件或各种其他范围。

\n\n

这种方法的缺点是您必须控制正在分析的代码,因此您不能将其用于第三方代码。从 Intellij Idea 14 开始,有一个称为自动@NotNull/@Nullable/@Contract 推理的功能的功能。默认情况下,此功能在 intellij idea 14 中处于活动状态。Idea分析源码,自动检测是否应该有@Nullable或@NotNull注解。与 infer nullity 的主要区别在于,它实际上不会将注释插入代码本身,而仅在左侧编辑器栏上显示合约信息。如果您正在使用第三方库或不希望在代码中使用专有的 jetbrains 注释,这尤其有用。

\n\n

自动推断@NotNull注释

\n\n

更新:

\n\n

请注意,@Nullable 注释不再自动推断,因为它导致了太多误报https://youtrack.jetbrains.com/issue/IDEA-130063#comment=27-812471

\n\n

另外,根据Peter Gromov 对上述帖子作者的评论并非所有方法都是通过此功能推断的

\n\n
\n

另请注意,对于可重写的方法,不会推断契约,即非静态非私有非最终方法不具有契约。

\n
\n


Nad*_*ari 2

IntelliJ IDEA 检查

一种方法是使用Inspections

如果代码有注释,@Nullable您可以使用检查:

分析菜单

然后选择Run Inspection by Name

@可为空的问题

然后您可以选择范围(项目、测试等)

在此输入图像描述

结果将显示在检查选项卡中:

在此输入图像描述

可空操作方法

您可以在可为空的操作方法中找到更多相关信息