使用IntelliJ注释,如果方法参数以两种不同的方式为空(并组合它们,总共三个),则可以声明函数失败:
我可以在method参数上使用@NotNull
注释来声明参数永远不应为null。
@NotNull
public static String doSomething(@NotNull CharSequence parameter) throws NullPointerException {
return String.format("This is the value: %s, of type %s",
Objects.requireNonNull(parameter),
parameter.getClass().getName());
}
或者,我可以使用@Contract("null -> fail")
注释,它声明如果第一个参数为null,该方法将抛出异常。
@NotNull
@Contract("null -> fail")
public static String doSomething(CharSequence parameter) throws NullPointerException {
return String.format("This is the value: %s, of type %s",
Objects.requireNonNull(parameter),
parameter.getClass().getName());
}
最后,我甚至可以在我的IntelliJ IDEA 14.1.4中使用两者并且没有任何内容抱怨:
@NotNull
@Contract("null -> fail")
public static String doSomething(@NotNull CharSequence parameter) throws NullPointerException {
return String.format("This is the value: %s, of type %s",
Objects.requireNonNull(parameter),
parameter.getClass().getName());
}
最好使用这三种情况中的哪一种?
答案 0 :(得分:2)
在你的情况下,我会使用@NotNull,因为:
@Contract注释是一个功能更强大但不太具体的工具。它允许您表达更复杂的合同,其缺点是生成的编辑器警告可能更加模糊,并且不会自动添加运行时检查。