我经常有这样的代码:
protected @Nullable Value value;
public boolean hasValue() { return value != null; }
问题在于,当我像这样进行空检查时:
if (!hasValue()) throw...
return value.toString();
然后 IntelliJ 会警告我可能出现 NPE
而
if (value != null) throw...
return value.toString();
避免此警告。
有没有办法装饰我的
hasValue()
方法,以便 IntelliJ 知道它执行空检查?并且不会显示警告?
Intellij-Jetbrains 是非常聪明的 IDE,它本身就为您提供了解决许多问题的方法。
看下面的截图。它建议您消除此警告的五种方法:
1) 添加
assert value != null
;
2) 将 return 语句替换为
return value != null ? value.toString() : null;
3)用
包围 if (value != null) {
return value.toString();
}
4)通过添加评论来抑制对此特定声明的检查:
//noinspection ConstantConditions
return value.toString();
5)至少添加,正如之前 @ochi 建议使用
@SuppressWarnings("ConstantConditions")
注释,它可以用于方法或整个类。
要调用此上下文菜单,请使用快捷键
Alt+Enter
(我认为它们对于所有操作系统都是通用的)。
实际正确的答案是在检查 null 的方法中添加
@Contract
注释。