小编典典

在方法参数中使用 NotNull 注解

all

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

我有这样的方法:

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

我编写了一个 JUnit 测试,传入参数 searchList
的空值。我期待会发生某种类型的错误,但它就像注释不存在一样。这是预期的行为吗?据我了解,这是为了让您跳过编写样板空检查代码。

非常感谢您解释@NotNull 应该做什么。


阅读 149

收藏
2022-06-25

共1个答案

小编典典

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

注释提醒您在以下@Nullable情况下引入 NPE 检查的必要性:

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

@NotNullAnnotation 实际上是一个明确的契约,声明如下:

  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检查(例如在
spring 和 hibernate 中)。

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

有关更多信息,请参阅:

  1. Bean 验证
  2. NotNull.java
  3. 约束.java
  4. 约束验证器.java
2022-06-25