在 Java 17 switch-case 中使用 Final 变量的好处

2024-04-16

有人可以告诉我 Java 17 接受最终表达式作为 switch-case-constructs 中的 case 表达式但不接受最终表达式作为参数传递的好处吗?

    void test(int distinction, final int foo) {
        final var bar = 2;
        
        switch (distinction) {
        case foo -> doSomething(); // does not compile -> case expressions must be constant expressions
        case bar -> doSomething(); // does compile
        case 3 -> doOtherThings(); // does compile
        }
    }

尽管 foo 和 bar 一样是最终变量,为什么编译器不接受情况 1?

在我看来,案例 3 的可读性比案例 2 好得多。所以我没有看到新语言结构的好处。


箱子标签必须是编译时间常数。最终参数不是编译时常量;它可能不会因方法的给定调用而变化,但可能会因方法的调用而变化。 (最终实例字段和没有初始化程序的静态最终字段也不是编译时常量。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 17 switch-case 中使用 Final 变量的好处 的相关文章

随机推荐

  • Amazon S3 上传错误 PermanentRedirectException

    我已经使用 Composer 安装了适用于 PHP 的 Amazon SDK 我复制了示例代码并在我的系统中实现 但是当我尝试上传文件时 我得到以下信息 为了安全起见 我已将路径设为通用 致命错误 未捕获异常 Aws S3 Exceptio
  • 重用黄瓜数据表

    如何跨多个场景或功能文件重用 Cucumber 测试数据 我想绕过表数据代码重复 我当前的功能文件 Scenario At begining unable to click on first When On Sidebar page I c
  • 网格单位向量中的元素替换

    我已经对此感到困惑好几次了 所以这里为其他可能偶然发现同样问题的人提出了一个虚构的问题 考虑这个网格单位向量 a unit 1 3 c cm in npc 我想用新值替换一些元素 自然的方法是 a 1 unit 2 pt a 1 2cm 2
  • 如何使用 javax.mail.internet.MimeBodyPart.setFileName 保留所有字符?

    我需要使用创建邮件javax mail版本 1 6 2 希望尽可能坚持高级方法 并希望避免自己处理字符编码 折叠以及最终获得有效邮件所需的任何内容 我目前正在处理的一个问题是文件名 因为默认情况下javax mail internet Mi
  • 如何在 Tridion 中获取当前登录用户的用户 ID?

    我在 Tridion 中实现了一个功能区工具栏按钮 作为其中的一部分 我需要循环访问一些组件 这需要有效的会话 要在 Tridion 中创建会话 我需要一个用户 ID 如何获取当前用户的User Id windows User Id 下面的
  • PHP 在函数中包含/需要

    是否可以在 PHP 函数内的包含文件中包含 return 语句 我希望这样做 因为我在单独的文件中有很多函数 并且它们在顶部都有大量共享代码 As in function sync include once file php echo Te
  • 快照图像不能用作舞台图标

    我正在尝试将舞台快照中的图像设置为舞台图标 下面的代码演示了它 import javafx application Application import javafx scene Scene import javafx scene imag
  • 视口、窗口、文档

    在下面的代码中 document documentElement clientWidth 1349 document documentElement clientHeight 363 window innerWidth 1366 windo
  • Gradle 多项目定义对根项目的依赖

    我有一个多项目 gradle 构建 以这种方式配置 root projectA projectB 我想在root build gradle所有嵌套项目的依赖项 这是文件 subprojects version 1 0 SNAPSHOT re
  • Blazor RenderFragment 到字符串

    我正在开发一个代码块组件 Net 6 Blazor wasm 我需要显示RenderFragment as string并在我的 html 中渲染该组件 这是我的代码块组件 pre class language html code clas
  • 服务崩溃,事件名称为 [CLR20r3] [重复]

    这个问题在这里已经有答案了 我已经创建了一项服务 Net c 基本上定期发送电子邮件 该服务在我的上运行良好x32 XP机器但是当我部署时x64 build基于另一个 x64 Windows Server 2008 R2机器 服务启动并在几
  • 寻找 CUDA 中的最大值

    我正在尝试在 CUDA 中编写代码来查找最大值 对于给定的一组数字 假设您有 20 个数字 并且内核在 2 个块 每块 5 个线程 上运行 现在假设 10 个线程同时比较前 10 个值 并且thread 2找到最大值 因此线程 2 正在更新
  • Ruby 调试“没有要加载的文件--spec_helper”

    菜鸟可能会错过一些明显的东西 我正在尝试调试 Rspec 文件 此时 Rspec 文件已被删除 require spec helper describe PagesController do render views describe GE
  • 此错误是否会带来不稳定的功能,使其无法与稳定的 Rust 版本一起使用?

    我正在研究这个仓库 https github com chunjiw oxd 它在 M2 笔记本电脑上的 MacOS 上构建没有问题 但是当我尝试在 Debian 桌面上构建它时 它显示以下错误 error E0554 feature ma
  • 如何实现 not_all_equal/1 谓词

    如何实施not all equal 1谓词 如果给定列表包含至少 2 个不同的元素 则该谓词成功 否则失败 这是我的尝试 不是很纯粹的尝试 not all equal L member H1 L member H2 L H1 H2 gt t
  • Hibernate 注释上分配的生成器类

    这里是休眠新手 我正在研究一个简单的 Hibernate 映射文件 当我使用 xml 方法时 我将生成器类设置为分配 在分配员工 ID 之前必须检查某些逻辑 因此我无法生成它 自动地
  • 更改选项并重新初始化

    我在用jscroll作为无限滚动寻呼机 j frontpage jscroll loadingHtml div style text align center img width 50 src ring alt 1 gif alt Load
  • Xcode 如何知道在哪里寻找框架?

    示例 我导入一个这样的框架 import
  • 如何使用 Java 确定 Windows 是 32 位还是 64 位体系结构?

    如何使用 Java 确定 Windows 是 32 位还是 64 位体系结构 我不太相信读取 os arch 系统变量 如果用户在 64 位系统上运行 64 位 JVM 则它可以工作 如果用户在 64 位系统上运行 32 位 JVM 则它不
  • 在 Java 17 switch-case 中使用 Final 变量的好处

    有人可以告诉我 Java 17 接受最终表达式作为 switch case constructs 中的 case 表达式但不接受最终表达式作为参数传递的好处吗 void test int distinction final int foo