我知道不建议捕获NPE,但是NPE所在的方法的返回值是基于NPE来自的变量的 boolean 值。
代码是这样的:
public static boolean isStale() {
return a.get(); //a==null causing NPE
}
就我而言,如果没有 a 的信息,我真的不知道要返回什么。 我应该怎么办?如果有的话,我应该抛出什么样的异常?
编辑:
1.返回 true 或 false 将不准确,因为结果实际上取决于 a 中的信息。
- a 实际上来自服务调用 client.getA()
最佳答案
没有理由阻止代码抛出异常。只需考虑一下您的情况:您自己说您的方法的行为未在 a == null
情况下定义,那么您为什么要处理它呢?它只会导致奇怪的行为,并且您的用户可能会惊讶于他们的代码失败或在某个地方产生意外结果,而他们对您的 API 的调用却进展顺利。
异常是专门为解决此类问题而设计的,因此请充分利用它。您可以抛出一个新的自定义异常来添加一些特定于 API 的语义,或者让 NPE 传播到调用者。
例如:
public static boolean isStale() {
if (a == null) throw new IllegalStateException("a should not be null");
return a.get();
}
但是,您更有可能应该在构造函数中执行此操作(因为我假设 a
是一个属性)。在构造函数中,我会选择 IllegalArgumentException
。
关于java - 不应该捕获 NPE 但不知道如何处理 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844511/