java - 当开关用于枚举时,默认值的用法是什么?

标签 java enums

假设我有一个具有 2 个可能值的枚举 Color:REDBLUE:

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 block ,我应该抛出异常吗?

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 语句,您将立即发现错误。

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

关于java - 当开关用于枚举时,默认值的用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019562/

相关文章:

php - 通过存储在 PHP 字符串中的名称获取枚举值

java - Java中的枚举查找

python: object() 不带参数错误

java - 如何向 JTree 添加鼠标监听器,以便我可以在将鼠标悬停在节点上时更改光标(变为手形光标)?

java - hibernate 事件检测器

java - 在 JApplet 中绘制随机点

enums - 使用负枚举有什么好处

不同版本和更新中的java枚举

java - 无法将 HSDIS 与 OpenJDK 11 一起使用

java - 数据库中存在缓慢问题的 Java 对象列表