Java switch case 抛出 nullPointer 异常

2024-04-29

我有一个枚举声明如下 -

public enum Status {
    REQ ("URL1"),
    NOT ("URL2"),
    GET ("URL3");

    String getURL;

    Status(String getURL) {
        this.getURL = getURL;

    }
}

我班上的一个领域:

private Status status;

我有一个函数可以根据枚举类型检索 URL,如下所示 -

public String viewURL() {
    switch (status) {
        case REQ:
            return REQ.getURL;
        case NOT:
            return NOT.getURL;
        case GET:
            return GET.getURL;
    }
    return null;
}

我遇到了一个NullPointerException在这个方法中,当status is null.

然而,当我使用 if 语句实现相同的功能时,它工作得很好 -

public String viewURL() {
    if (status == REQ) {
        return REQ.getURL;
    }
    if (status == NOT) {
        return NOT.getURL;
    }
    if (status == GET) {
        return GET.getURL;
    }
    return null;
}

无法理解我哪里出错了。任何帮助将非常感激!

任何有关重构的帮助也将不胜感激!


这是一个理想的用例Optional https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/util/Optional.html:

public String viewURL() {
    return Optional.ofNullable(status)
      .map(s -> s.getUrl) // only executes if previous step returns non-null
      .orElse(null);      // executes if any step returns null
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java switch case 抛出 nullPointer 异常 的相关文章

随机推荐

  • Magento - 分页生成错误的 URL

    除了网址之外 我的分页工作正常 第 2 页的链接是 example com products 21p 2 什么时候应该是 example com products p 2 当我在地址栏中输入后者时 它工作正常 这是生成链接的代码 li a
  • 使用 jQuery 中止 Ajax 请求

    是否有可能使用 jQuery 我取消 中止 Ajax 请求我还没有收到回复 大多数 jQuery Ajax 方法都会返回 XMLHttpRequest 或等效的 对象 因此您可以使用abort 请参阅文档 中止方法 http msdn mi
  • 适用于 Windows 的 C++11 编译器

    我刚刚在 Channel9 上看了一些视频 我发现 lambda 之类的东西真的很酷 当我尝试复制该示例时 它失败了 auto也没用 我正在使用诺基亚的 qtcreator 它随 gcc 4 4 0 一起提供 我想知道哪个编译器实现了有趣的
  • 尝试在类中定义静态常量变量

    我正在定义一个变量adc cmd 9 as a static const unsigned char在我的课堂上ADC私人之下 由于它是一个常量 我想我只需在它自己的类中定义它 但这显然不起作用 pragma once class ADC
  • 使用 for_each 调用成员函数

    这是我原来的代码 include stdafx h include
  • 在 AS3 中将 Little-endian ByteArray 转换为 Big-endian

    AS3中如何将Little endian ByteArray转换为Big endian 我将 bitmapData 转换为 Big endian ByteArray 然后使用 Adob e Alchemy 将其推入内存 然后当我从内存中读取
  • IEnumerable / IQueryable 上的动态 LINQ OrderBy

    我在中找到了一个例子VS2008示例 http msdn2 microsoft com en us bb330936 aspx用于动态 LINQ 允许您使用类似 SQL 的字符串 例如OrderBy Name Age DESC 用于订购 不
  • “sites-enabled”和“sites-available”目录之间有什么区别? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • PHP/Apache 中的输出缓冲块如何工作?

    假设我将随机数据从 PHP 回显到浏览器 随机数据总量约为 XGb 回显以 YKb 块的形式完成 不使用 ob start PHP 和 Apache 缓冲区已满后 echo 调用是否会阻塞 客户端无法以与生成数据相同的速度使用数据 如果是
  • ui.router 和 ui.state 之间的 angularJS 有什么区别?

    我正在努力使用多个视图来设置 angularJS SPA角度 ui 路由器 https github com angular ui ui router 当我浏览网络上的教程和操作方法时 我看到了各种各样的依赖项 ui router gith
  • 如何将向量标准化/非标准化到范围 [-1;1]

    我怎么能够正常化到范围的向量 1 1 我想使用函数norm 因为它会更快 也让我知道我该怎么做非规范化之后的向量正常化 norm对向量进行归一化 使其平方和为 1 如果要对向量进行归一化 使其所有元素都在 0 和 1 之间 则需要使用最小值
  • 使用新数据快速更新 UITableView

    我正在尝试重新填充我的UITableView来自另一个 JSON 调用的数据 然而 我当前的设置似乎不起作用 虽然有很多相同的问题 但我可以找到我已经尝试过的答案 我将 API 数据保存在CoreData实体对象 我用我的 UITableV
  • 在 Mac 上设置 Laravel php artisan 迁移错误:没有这样的文件或目录 [重复]

    这个问题在这里已经有答案了 将一个完美运行的 laravel 项目从 git 拉到运行 MAMP 的 mac 上 项目在linux机器上完美运行 作曲家安装 php artisan migrate 出现以下错误 PDOException S
  • 使用音频单元录制我的 iPhone 应用程序播放的声音

    我今天有很多有趣的事情iOS 和音频单元并发现了很多有用的资源 包括在内 首先 我对某些事情感到困惑 是否真的有必要创建一个音频图 with 混合器单元录制应用程序播放的声音 或者播放声音就足够了ObjectAL https github
  • 位置:滚动一定量后粘性不起作用

    我正在尝试创建一个布局 其中第一列和最后一列div是粘性的 当我滚动一定数量时 最左边的列超出了左侧限制 为什么会发生这种情况以及如何解决它 当您滚动到最右侧时 您可以看到红色列跳出框 示例代码笔 https codepen io vigh
  • 如何在基类中声明类似工厂的方法?

    我正在寻找 C 类设计问题的解决方案 我想要实现的是在基类中拥有静态方法方法 它将返回后代类型对象的实例 关键是 其中一些应该是单身人士 我正在用VCL编写它 所以有可能使用 properties 但我更喜欢纯 C 解决方案 class B
  • HTML5 视频结束倒计时

    我可以对 HTML5 视频的结束进行倒计时吗
  • 你能让 vi 在打开时“前进”屏幕吗?

    我经常在 vi 中工作 暂停 vi 在 cli 上运行一些东西 然后返回到 vi 来处理结果 例如 修复运行 cli 命令时出现的错误 但是 当我 fg vi 时 vi 会 擦除 当前终端缓冲区 并且我在回滚缓冲区中看不到终端输出的 最后一
  • 如何将 DataAnnotations ErrorMessageResourceName 与自定义资源解决方案结合使用

    我正在使用 C 构建 MVC Web 应用程序 由于该网站将是多语言的 因此我实现了自己的资源管理器 该类负责根据当前线程区域性从数据库 缓存中获取所需的资源字符串 并且到目前为止工作正常 我的问题是 我想使用我的自定义 ResourceM
  • Java switch case 抛出 nullPointer 异常

    我有一个枚举声明如下 public enum Status REQ URL1 NOT URL2 GET URL3 String getURL Status String getURL this getURL getURL 我班上的一个领域