当前位置: 首页 > 面试题库 >

在方法参数中使用NotNull注释

韩华美
2023-03-14
问题内容

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

我有这样的方法:

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

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

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


问题答案:

@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


 类似资料:
  • 我编写了一个JUnit测试,为参数searchingList传入null值。我原以为会发生某种类型的错误,但结果好像注释不在那里一样。这是意料之中的行为吗?根据我的理解,这是允许您跳过编写样板空校验代码。 如果能解释一下@NotNull到底应该做什么,将会非常感谢。

  • 我在使用IntelliJ IDEA 2020.2时启用了检查“@NotNull/@Nullable problems”。在编写自定义ThreadFactory时,我在的参数上收到IntelliJ IDEA检查警告“Not annotated parameter overrides@NotNull parameter”: 爪哇。util。同时发生的ThreadFactory接口不注释。IDEA的代码

  • 我有一个简单的方法来获取给定公司ID的文档列表。方法如下: 我想使用Javax验证约束来确保传入的companyId不是null。但它似乎没有任何影响,因为我能够传递一个null值,它向下流到存储库上的findByCompany调用。我还在NotNull之前添加了Valid来强制验证,但这也没什么用。 我总是可以写几行代码来检查null值,但我想使用javax。验证注释,使代码更具可读性和简洁性。

  • 问题内容: 我有一个终结点实现,即将一个对象传递给参数列表。我正在尝试使用@NotNull批注来验证该对象是否为null。 如果该对象被验证为非null,则端点将仅返回200 OK响应。但是,当我使用指定的路径向该终结点发出请求时,体内没有任何内容时,不会引发任何错误。相反,我能够检索200响应(即使我在返回响应之前检查对象是否为null,也表明是这种情况)。 有人可以指导我如何以正确的方式验证对

  • 我正在学习Spring MVC Showcase项目,可从STS仪表板下载 我有以下情况,但我并不完全清楚: 我有以下表格: 与id="readForm"的表单的提交操作相关,我有以下Jquery函数,它简单地执行一个AJAX调用,将两个经过验证的文本变量隐藏在请求的主体字段中:**foo=bar和Fru=apple 我的控制器类处理此请求的方法如下: 好的,该方法将使用@ModelAttribu