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

标签 java exception nullpointerexception

我知道不建议捕获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/

    相关文章:

    java - 为什么我不断收到 Java.Lang.NullPointerException

    java - 如何从 Retrofit2 获得字符串响应?

    java - 从 ZipInputStream Java 读取时出现 IndexOutOfBoundsException

    java - 为什么我的 Spring @Autowired 字段为空?

    java - 我不明白 java.lang.NullPointerException 是如何引起的

    java - 在计算哈希码时,HashSet 如何在没有 NullPointerException 的情况下记录空条目

    java - 如何使用 Google Guava 的 Throwables.propagateIfInstanceOf()?

    java - 如果在 java 中的文件中发现不可打印的字符,则终止程序

    Android:android.view.InflateException:二进制 XML 文件第 13 行:三星 Galaxy S 中的错误膨胀类 <unknown>

    python - 使用 sentry 处理 scrapy 中的所有异常