Enum.values()在物理上不能返回null(至少我不能让它返回null)但是因为没有"实现"它的类IntelliJ不允许我在外部注释文件中将其标记为@NonNull。
到目前为止,我能想到的最好的方法是在我的枚举类中创建一个这样的方法:
@SuppressWarnings("Constant Conditions")
@NonNull
public static MyEnum[] getValues()
{
return values()
}
这是有效但无用的代码,虽然任何程序员都会立即识别MyEnum.values(),但.getValues()会强迫你至少查看javadoc以查看发生了什么。
我是否错过了某种方式告诉IntelliJ这种非方法是否安全?
答案 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();
。