不应该捕获NPE但不知道如何处理NULL

Sta*_*Jay 0 java exception nullpointerexception

我知道不建议捕获NPE,但是NPE是一个方法,其返回值是基于NPE来源的变量的布尔值.

代码是这样的:

public static boolean isStale() {
 return a.get();  //a==null causing NPE
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我真的不知道如果没有a的信息将返回什么.我该怎么办?如果有的话,我应该扔什么样的例外?

编辑:
1.返回true或false将是不准确的,因为结果实际上取决于a内的信息.

  1. a实际上来自服务调用client.getA()

Dic*_*ici 5

您没有理由阻止代码抛出异常.只考虑你的情况:你自己说你的方法的行为没有定义a == null,所以你为什么要处理它?它只会导致奇怪的行为,并且您的用户可能会惊讶于他们的代码失败或在某处产生意外结果,而他们对API的调用很顺利.

例外是专门为解决这类问题而设计的,所以要充分利用它.您可以抛出一个新的自定义异常来添加一些特定于API的语义,或者让NPE传播给调用者.

例如 :

public static boolean isStale() {
     if (a == null) throw new IllegalStateException("a should not be null");
     return a.get();
}
Run Code Online (Sandbox Code Playgroud)

但是,你更有可能在构造函数中这样做(因为我假设a是一个属性).在构造函数中,我会选择IllegalArgumentException.