【问题标题】:Is null check of field annotated with javax.inject.Inject required是否需要对带有 javax.inject.Inject 注释的字段进行空检查
【发布时间】:2017-07-29 05:45:32
【问题描述】:

我有一个类,我使用javax.inject.Inject 注释注入了一个字段

import javax.inject.Inject;

public class Foo extends BaseFoo {
  @Inject
  private Bar bar;
  ...

  public void execute(){
    if (bar == null) {
      //log failure message and return
      return;
    }
    //Do your work..
  }
  ...
}

我的问题是,在上面的例子中,null 检查是否需要?为什么?

【问题讨论】:

  • 我不确定。我会在 final 字段中使用可注入的构造函数。
  • 感谢您的接受。让我知道我是否可以做任何事情来让我的回答在你眼中有价值,比如添加其他信息......

标签: java spring dependency-injection annotations inject


【解决方案1】:

答案是:视情况而定。

如果您认为存在注入过程不会注入 null 的有效场景,那么您确实需要进行该检查。如果您认为这永远不会发生,那么您可能最终会在运行时遇到 NPE;然后再一次;你必须自己弄清楚这种行为在你的环境中是否“合适”(以及如何处理它/如何处理它)。

但我宁愿努力使该字段成为最终字段并将注释放在您的构造函数上;然后你可以对传入的参数进行Objects.requireNonNull()检查;并且您稍后可以确定任何 Foo 对象都是 null free。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2016-12-17
    • 2020-03-09
    相关资源
    最近更新 更多