33

为什么我会从 IntelliJ 中的“NullableProblems”检查中收到警告:

public class Test implements Comparable<Test> {
    @Override
    public int compareTo(Test o) {
        return 0;
    }
}

我正在使用 IntelliJ 14.1.4 并使用 Java 1.7 进行编译

截屏:

在此处输入图像描述

在参数之前添加@NotNull没有帮助:

在此处输入图像描述

4

3 回答 3

24

来自Comparable.compareTo

@throws NullPointerException if the specified object is null

所以 IntelliJ 知道,该对象不应该是并自动null添加@NotNull注释:

IntelliJ IDEA 将仔细查看 SDK 和库字节码,并自动推断这些注释,以便以后可以使用它们来分析源代码以发现您忽略 null 的地方。

您的覆盖方法不包含此注释,因此它会覆盖此行为,使参数可为空 - 违反Comparable接口的合同。

@NotNull您可以通过在参数之前添加来解决此问题。

您也可以通过按Alt+ Enter、在弹出菜单中选择警告并Disable inspection在子菜单中选择来禁用此检查。

查看Web 帮助此线程以获取有关@NotNull/@NonNull注释的更多信息。

于 2015-07-06T09:56:27.657 回答
13

这可以很容易地在 IntelliJ IDEA 中进行全局配置,对我个人来说是推荐的方式。如果需要,您可以添加自己的注释。
IEjavax.validation.constraints.NotNull

设置路径:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

一些截图: 在此处输入图像描述 在此处输入图像描述

于 2016-11-03T08:26:18.987 回答
-1

这是因为您正在覆盖没有@NotNull注释的方法。

如果覆盖方法没有@NotNull注释,IntelliJ IDEA 会发出警告。

于 2015-07-06T09:47:36.580 回答