在Intellij的想法中,我如何将MyEnum.values()标记为@NonNull?

时间:2018-02-23 17:05:18

标签: java intellij-idea nullable

Enum.values()在物理上不能返回null(至少我不能让它返回null)但是因为没有"实现"它的类IntelliJ不允许我在外部注释文件中将其标记为@NonNull。

到目前为止,我能想到的最好的方法是在我的枚举类中创建一个这样的方法:

@SuppressWarnings("Constant Conditions")
@NonNull
public static MyEnum[] getValues()
{
    return values()
}

这是有效但无用的代码,虽然任何程序员都会立即识别MyEnum.values(),但.getValues()会强迫你至少查看javadoc以查看发生了什么。

我是否错过了某种方式告诉IntelliJ这种非方法是否安全?

2 个答案:

答案 0 :(得分:0)

您不需要将此方法标记为@NotNull,因为IntelliJ IDEA自己知道它是@NotNull。请尝试以下代码段:

 enum X { a, b }

 public void v() {
    if (X.values() == null) {
         System.out.println("Can't happen");
    }
 }

IntelliJ IDEA会将==检查突出显示为“条件始终为假”。

答案 1 :(得分:0)

您的注释语法不正确;您已将@NonNull放在错误的位置。

@NonNull是一个类型注释,应该写在类型前面。它适用于之前写入的类型。

为了向后兼容,Java允许您在修饰符之前编写类型注释,例如public;这可能会导致混乱。 你写的内容相当于:

public static @NonNull MyEnum[] getValues() { ... }

这表示getValues()返回一个可能为null的非空值数组。

相反,你可能想写

public static MyEnum @NonNull [] getValues() { ... }

表示getValues()返回非空数组。

同样,你可能想写 X @NonNull [] x = X.values(); 代替 @NonNull X[] x = X.values();