是否需要对用 javax.inject.Inject 注释的字段进行空检查

Is null check of field annotated with javax.inject.Inject required

我有一个 class,我在其中使用 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检查?为什么?

答案是:视情况而定。

如果您认为存在注入过程不会注入 null 的有效场景,那么您确实需要进行检查。如果您认为这永远不会发生,那么您可能会在运行时遇到 NPE;然后再一次;你必须自己弄清楚这种行为在你的上下文中是否 "appropriate" (然后 what/how 来处理它)。

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