小编典典

在方法参数中使用NotNull注释

java

我刚刚开始在@NotNullJava 8中使用注释,并得到了一些意外的结果。

我有这样的方法:

public List<Found> findStuff(@NotNull List<Searching> searchingList) {
    ... code here ...
}

我编写了一个JUnit测试,为参数searchList传递了空值。我原以为会发生某种类型的错误,但好像没有注释就通过了。这是预期的行为吗?据我了解,这是允许您跳过编写样板空检查代码。

对于@NotNull应该做什么的解释将不胜感激。


阅读 4701

收藏
2020-09-28

共1个答案

小编典典

@Nullable@NotNull自己做什么。它们应该充当文档工具。

@Nullable注释提醒您在以下情况下必须进行NPE检查:

  1. 可以返回null的调用方法。
  2. 取消引用可以为空的变量(字段,局部变量,参数)。

@NotNull注释是,实际上,在声明下面的一个明确的合同:

  1. 方法不应返回null。
  2. 变量(如字段,局部变量和参数) 不能 不宜 持有空值。

例如,代替编写:

/**
 * @param aX should not be null
 */
public void setX(final Object aX ) {
    // some code
}

您可以使用:

public void setX(@NotNull final Object aX ) {
    // some code
}

另外,@NotNull通常由ConstraintValidators检查(例如,在春季和冬眠期间)。

@NotNull由于注释定义不提供任何ConstraintValidator类型引用,因此注释本身不会进行任何验证。

有关更多信息,请参见:

  1. Bean验证
  2. NotNull.java
  3. Constraint.java
  4. ConstraintValidator.java
2020-09-28