如何确保编译时枚举开关的完整性?

2023-11-30

我有几个 switch 语句来测试enum. All enum值必须在switch的陈述case陈述。在代码重构期间,可能会发生以下情况:enum收缩和增长。当。。。的时候enum收缩编译器会抛出错误。但如果enum成长。匹配状态被遗忘并产生运行时错误。我想将此错误从运行时移至编译时。理论上应该可以检测到丢失的enum编译时的情况。有什么办法可以实现这一点吗?

这个问题已经存在“如何检测新值已添加到枚举中并且未在 switch 中处理”但它不包含答案,仅包含 Eclipse 相关的解决方法。


In 有效的JavaJoshua Bloch 建议创建一个为每个常量实现的抽象方法。例如:

enum Color {
    RED   { public String getName() {return "Red";} },
    GREEN { public String getName() {return "Green";} },
    BLUE  { public String getName() {return "Blue";} };
    public abstract String getName();
}

这将作为一个更安全的开关,强制您在添加新常量时实现该方法。

编辑:为了消除一些混乱,这是使用常规的等效项switch:

enum Color {
    RED, GREEN, BLUE;
    public String getName() {
        switch(this) {
            case RED:   return "Red";
            case GREEN: return "Green";
            case BLUE:  return "Blue";
            default: return null;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确保编译时枚举开关的完整性? 的相关文章

  • 将所有 BigDecimal 运算设置为特定精度?

    我的Java程序以高精度计算为中心 需要精确到至少120位小数 因此 程序中所有非整数都将由 BigDecimal 表示 显然 我需要指定 BigDecimal 的舍入精度 以避免无限小数表达式等 目前 我发现必须在 BigDecimal
  • Java泛型 - 实现像map这样的高阶函数

    我决定用 Java 编写一些常见的高阶函数 map filter reduce 等 这些函数通过泛型实现类型安全 但我在一个特定函数中遇到通配符匹配问题 为了完整起见 函子接口是这样的 The interface containing th
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • Java 中支持多少维数组,例如 a[1][1][1][1]....[1]? [复制]

    这个问题在这里已经有答案了 Java支持多少维数组a 1 1 1 1 1 我可以为数组声明无限数量的维度吗 数组维数限制为 255 有趣的是 JLS定义的Java编程语言没有这样的限制 但是你可以在JVM规范 http docs oracl
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • 在 Java Swing 元素中使用 HTML 样式是不好的做法吗?

    使用 HTML 设置 Swing 元素的样式被认为是不好的做法吗 举个例子 如果我想让标签变大并变红一次 我有两个选择 使用 API 调用 JLabel label new JLabel This is a title label setF
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 如何使用键盘上的“删除”按钮作为从 JTable 中删除行的快捷方式[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作删除按钮来删除JTable中的行 https stackoverflow com questions 13236206 how to make delete button to delete
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • Java 空值检查

    我有一个thread1 if object null object play 和另一个thread2可以写null into object随时参考 我将同时运行这些线程 我知道thread2可以重写object后参考null检查并会抛出Nu
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 使用 InputStream 通过 TCP 套接字接收多个图像

    每次我从相机捕获图像时 我试图将多个图像自动从我的 Android 手机一张一张地发送到服务器 PC 问题是read 函数仅在第一次时阻塞 因此 从技术上讲 只有一张图像被接收并完美显示 但在那之后当is read 回报 1 该功能不阻塞
  • 在 Streamreduce 方法中,求和时恒等式必须始终为 0,乘​​法时恒等式必须始终为 1?

    我继续java 8学习 我发现了一个有趣的行为 让我们看一下代码示例 identity value and accumulator and combiner Integer summaryAge Person getPersons stre
  • Spring Boot中服务接口类的用途

    我的问题是关于接口类的使用 我对 Spring 还很陌生 所以如果这过于简单 请耐心等待 首先 当您可以在 BoxService 中声明 find all 时 这里拥有 IBoxService 接口有什么意义 其次 在控制器中如何使用IBo
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static

随机推荐

  • S3 静态网站上的 https 卡住

    我创建了一个 S3 存储桶并将其设为静态网站 如果我尝试重定向 例如重定向到 Google 它对于 HTTP 来说效果很好 例如 curl I http test s3 redirect s3 website eu west 1 amazo
  • UIActionSheet 自定义

    我们可以更改破坏性按钮和其他按钮在 UIActionSheet 中出现的顺序吗 默认情况下 破坏性按钮 红色 显示在其他按钮上方 在我的应用程序中 我希望其他按钮显示在破坏性按钮上方 没问题 只需分配并初始化一个新的 UIActionShe
  • 如何有效地找到给定位置附近最近的位置

    我正在制作一个脚本 其中将大量业务加载到具有纬度和经度的 mySQL 数据库中 然后 我为该脚本提供 最终用户的 纬度和经度 并且该脚本必须计算从提供的纬度 经度到从数据库获取的每个条目的距离 并按照从最近到最远的顺序对它们进行排序 我实际
  • h:dataTable 复合组件、cc.attrs.var、IllegalArgumentException

    我正在尝试创建自己的数据表 例如 primefaces 的数据表 问题是cc attrs var使用时会抛出 IllegalArgumentException 所以我想知道如何才能拥有像 Primefaces 这样的 var 属性
  • 如何将 Math.X 函数与 LINQ 结合使用?

    我有一个简单的表 SQL Server 和 EF6 Myvalues 有列Id Value 双倍的 我试图获得该表中所有值的自然对数之和 我的 LINQ 语句是 var sum db Myvalues Select x gt Math Lo
  • 使用 Array.new(n, Array.new) 创建矩阵

    我通过执行以下操作创建了一个数组 gameboard Array new 3 Array new 3 我尝试像这样分配一个值 我得到了这个 gameboard 0 2 X gameboard gt X X X 当我以不同方式声明数组时 ga
  • 如何为任意类型创建 Roslyn ITypeSymbol?

    我可以用一个语法生成器生成类型的参数Int32像这样 var generator SyntaxGenerator GetGenerator document var paramType generator TypeExpression Sp
  • 为什么 PRFRelation 不支持 fromLocalDataStore 查询?

    我有一个PFUser对象有几个PFRelation指向其他物体 当我运行以下代码时 PFRelation relation PFUser currentUser relationForKey Relation PFQuery query r
  • JavaScript 将字符串添加到数字

    我正在读MDN 上重新介绍 JavaScript并在该部分中Numbers它说您只需在字符串前面添加一个加号运算符即可将字符串转换为数字 例如 42 这将产生 42 的数字输出 但在接下来的部分中运营商它说 通过将字符串 某物 添加到任何数
  • 访问当前系统时区

    基本上我可以使用以下代码检测系统时区列表 foreach TimeZoneInfo info in tz Debug Log time zone id info Id display name info DisplayName 运行此代码
  • AjaxForm 结果中的 AjaxForm

    这是我的观点 foreach var item in Model tr Html RenderPartial PhoneRow item tr PhoneRow model PhoneModel using Ajax BeginForm E
  • Storage::move 给出“在路径中找不到文件:” Laravel 和 Ubuntu

    我想移动一些文件 Storage move posts temp val photos post gt id val 但它给了我 File not found at path home vagrant Code 有什么特殊的配置需要寻找吗
  • Pandas 和 SQLAlchemy:在连接期间重命名列

    I have table A and table B 两者都有一个专栏id和一列name 当我使用pd read sql 将 SQLAlchemy 查询的结果转换为 pandas DataFrame 生成的 DataFrame 有两列 名为
  • 解析数据 org.json.JSONException 时出错:在字符 0 处输入结束 - Android

    我正在开发一个测试 Android 应用程序 它必须显示来自 mysql 数据库的一些数据 这是我的日志 05 22 17 10 56 865 E JSON Parser 31648 Error parsing data org json
  • 如何优雅地检测 SSL

    我有一个 Web 服务 可以绑定到 ssl 或普通 http Java 客户端配置为了解服务器主机和端口 当客户端连接时 我构建服务器端点 例如http 主机 端口 服务 客户端不知道服务器是否使用 ssl 服务器始终绑定到单个端口 因此它
  • 自定义 EditorTemplate 未在 MVC4 中用于 DataType.Date

    我正在使用以下命令将 MVC3 应用程序升级到 MVC4来自微软的说明 一切都进行得相当顺利 除了我的一些日期模型属性现在呈现不同 例如 这些属性之一在视图模型中定义如下 Required ErrorMessage Required Dat
  • 当上游存在更改时,为什么 git status 显示分支是最新的?

    更改存在于跟踪分支的上游 但是当我输入时git status它表明我的本地分支机构是最新的 这是新行为吗 我是否更改了配置设置 或者出了什么问题 ubuntu host my repo git status On branch master
  • 占位符中的不同颜色[重复]

    这个问题在这里已经有答案了 我有一个带有占位符的输入字段 如下所示
  • OpenOffice Base 中的 sql 方言

    我熟悉 SQLite 和 MySQL 中的 SQL 但 OpenOffice Base 似乎要么非常瘫痪 要么我不明白如何执行原始 SQL 我想 有效地 这样做 INSERT INTO t2 SELECT NULL as id t foo
  • 如何确保编译时枚举开关的完整性?

    我有几个 switch 语句来测试enum All enum值必须在switch的陈述case陈述 在代码重构期间 可能会发生以下情况 enum收缩和增长 当 的时候enum收缩编译器会抛出错误 但如果enum成长 匹配状态被遗忘并产生运行