当开关用于枚举时,default 有什么用?

2024-07-01

假设我有一个枚举Color有 2 个可能的值:RED and BLUE:

public enum Color {
    RED,
    BLUE
}

现在假设我有这个枚举的 switch 语句,其中有两个可能值的代码:

Color color = getColor(); // a method which returns a value of enum "Color"
switch (color) {
case RED:
   ...
   break;

case BLUE:
   ...
   break;

default:
   break;
}

由于我有枚举的两个可能值的代码块,所以有什么用default在上面的代码中?

如果代码以某种方式到达,我应该抛出异常吗default像这样阻塞?

Color color = getColor(); // a method which returns a value of enum "Color"
switch (color) {
case RED:
   ...
   break;

case BLUE:
   ...
   break;

default:
   throw new IllegalArgumentException("This should not have happened");
}

正如第二个示例所示,抛出异常是一种很好的做法。您可以通过快速失败来提高代码的可维护性。

在这种情况下,这意味着如果您稍后(可能几年后)添加一个枚举值并且它到达 switch 语句,您将立即发现错误。

如果未设置默认值,即使使用新的枚举值,代码也可能会运行,并且可能会出现不良行为。

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

当开关用于枚举时,default 有什么用? 的相关文章

随机推荐

  • 正则表达式捕获冒号分隔的键值对,具有多行值

    我目前正在 Ruby on Rails 在 Eclipse 中 中开发一个项目 我的任务是使用正则表达式将数据块拆分为相关部分 我决定根据 3 个参数来分解数据 该行必须以大写字母开头 正则表达式等效 A Z 它必须以 正则表达式等效项 我
  • 如何保存带有自定义扩展名 (.sas) 的 TextEdit (mac) 文件?

    因此 我正在为 SAS 编写一些代码 我意识到我必须将文件另存为 filename sas 我的教授提到我必须在计算机上使用记事本或其他文本编辑器 如何在 Mac 上使用 TextEdit 保存 sas 文件 打开 TextEdit 添加一
  • mkoctfile 分段错误

    我正在尝试编译一个example https www gnu org software octave doc interpreter Getting Started with Mex 002dFiles html我在 Octave 中查看
  • 删除第一个注释-MapView iOS

    我正在从事地图视图项目 我有关于从地图视图中删除注释的问题 我已经实现了以下代码 但它随机删除注释 而不是第一个 mapView removeAnnotation self mapView annotations objectAtIndex
  • iOS 以编程方式添加 CardDAV 帐户

    是否可以添加CardDav以编程方式帐户 因为它可以通过手动使用来完成邮件 通讯录 日历 gt 添加帐户选项中Settings app 一般来说 是否可以在代码中添加任何其他类型的帐户 比如兑换账户 我在论坛上的某个地方读到 事实并非如此
  • 使用 Linq 对 XML 进行复杂排序

    我尝试为我的问题找到解决方案 但我在该领域 Linq XML 的知识相当有限 已经找到一个模拟施工 https stackoverflow com questions 6922180 sort xmldocument using linq
  • 如何将滚动条向上移动一行? (在 C# RichTextBox 中)

    对于我的 C RichTextBox 我想以编程方式执行与单击垂直滚动条顶部的向上箭头相同的操作 这会将 RichTextBox 显示向上移动一行 这个的代码是什么 谢谢 这就是我所做的 using System Runtime Inter
  • 将一个元素放在集合的尾部

    我发现自己做了很多事情 concat coll e 其中 coll 是集合 e 是单个元素 Clojure 中有执行此操作的函数吗 我知道 conj 最适合向量 但我不知道将使用哪个 coll 例如 它可以是向量 列表或排序集 某些类型的集
  • Blowfish 加密在加密和解密过程中弄乱了前 8 个字节

    我刚刚尝试使用 openssl c 库 Blowfish 算法进行一些加密 解密 并遇到了一个奇怪的错误 解密消息的前 64 位不知何故搞砸了 我究竟做错了什么 这是代码 include
  • 为什么我的 HTML 不使用 CSS 中定义的最后一个样式?

    我有以下按此顺序编写的 CSS h2 last child p last child ul last child margin bottom 0 content message margin 20px 1 667em 1 667em 1 6
  • 选择单元格中的所有形状

    我需要选择给定单元格中的所有形状 我写了这段代码 但它生成错误 Dim sh as shape For Each sh In ActiveSheet Shapes If Not Intersect Range B2 sh TopLeftCe
  • 使用打字稿的反应表出了问题

    将react table 与useGlobalFilter 一起使用时出现打字稿错误 我只是按照互联网上的一些说明进行操作 这是我的代码 const DataTable React FC
  • jScrollpane Chrome问题

    在 JScrollPane 站点的 已知问题 中 有一个 在 Webkit 浏览器中 CSS 必须是 包含在 JavaScript 之前 我这样做了 但有时我仍然遇到 仅在第一页 索引中 一些滚动问题 滚动就消失了 在我再次刷新页面后一切正
  • 使用 vba 创建“色阶”(避免条件格式)

    我正在寻找一种通过 VBA 代码将色阶应用于一组单元格的方法but not通过应用一些条件格式 我想将它们应用为静态颜色 内部颜色 我搜索了很多 Excel 网站 谷歌和 stackoverflow 但什么也没找到 对于我的情况 如果你看下
  • 使用 PowerMock 和 Mockito 模拟 Logger 和 LoggerFactory

    我想模拟以下记录器 但要验证日志条目是否被调用 而不是内容 private static Logger logger LoggerFactory getLogger GoodbyeController class 我想模拟用于 Logger
  • 自定义工具提示格式

    我在 Windows 上使用普通的原生 C 语言工作 没有其他平台 没有 C 是的 我是恐龙 我试图找到一个我认为的 所有者绘制工具提示控件 的示例 但这似乎不存在 至少对于标准 Windows 工具提示控件来说不是 我尝试搜索实现自定义工
  • 无需在线即可从 XMPP 获取离线消息

    我们的移动聊天应用程序使用 ejabberd 服务器 我们正在为我们的 IOS 应用程序使用 IOS XMPP Framework https github com robbiehanson XMPPFramework https gith
  • Jquery UI 选项卡在 AngularJS 中不起作用

    我在 angularJS 中使用 jquery UI 选项卡 并使用 ng repeat 生成列表项和选项卡容器 选项卡可以正常工作 但选项卡容器无法正常工作 模板 tabs html ul li a class pageName href
  • 下拉列表在 php 中保留先前选择的值

    我在 php 中创建了一个个人资料页面 用户使用 html 下拉列表选择性别 html代码如下 Gender
  • 当开关用于枚举时,default 有什么用?

    假设我有一个枚举Color有 2 个可能的值 RED and BLUE public enum Color RED BLUE 现在假设我有这个枚举的 switch 语句 其中有两个可能值的代码 Color color getColor a