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

标签 java intellij-idea nullpointerexception

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

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

Intellij 非常擅长警告我正在做的蠢事。有什么办法可以警告我这里潜在的 NPE 吗?

请注意,getResources 上没有任何 null/notnull 注释。至少在我使用的 JDK 1.7 中没有。

最佳答案

Intellij idea 可以检测@Nullable 和@NotNull 注解在哪里合适,automatically insert them .这可以用

Analyze -> Infer Nullity

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

这种方法的缺点是您必须控制要分析的代码,因此不能将其用于第三方代码。从 Intellij Idea 14 开始,有一个名为 Automatic @NotNull/@Nullable/@Contract inference 的功能.这个特性在 intellij idea 14 中默认是激活的。 idea分析源码,自动检测是否应该有@Nullable或者@NotNull注解。与 infer nullity 的主要区别在于它实际上并没有在代码本身中插入注释,而只是在左侧编辑栏中显示合约信息。如果您正在使用第三方库或不想在代码中使用专有的 jetbrains 注释,这尤其有用。

Auto-inferred @NotNull annotations

更新:

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

此外,根据 a comment Peter Gromov 为 post mentioned above 的作者撰写, 并不是所有的方法都是由这个特征推断出来的

Please also note that contracts are not inferred for methods that can be overridden, i.e. non-static non-private non-final methods don’t have contracts.

关于java - 有没有办法让 Intellij 警告我这段代码可能会导致 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868992/

相关文章:

java - Docker Swarm 上的 Consul 与 Spring Boot 客户端

java - 解析一行数据: split vs regex

java - 什么是NullPointerException,我该如何解决?

java - 数组堆栈中的 NullPointerException

python - 在 IntelliJ 中使用本地 Python 环境

android - Iappcompat v21 : material design ActionBar() InflateException error-inflating-class

java - 是否可以使用以下参数用户名、服务器IP、域查询 LDAP 以检查用户是否存在

java - JDBI 3 : Nested SQLObject

Java 数组循环出站

python - 启动 IDEA 时出错 : No JVM Installation Found