Java switch 语句在枚举上获得默认值

标签 java android enums

我有一个与此类似的 Java(适用于 Android)代码:

enum MyEnum {
    A, B, C
} 

String f(MyEnum e) {
    if (e == null) {
        return null;
    }

    switch(e) {
        case A: return "AA";
        case B: return "BB";
        case C: return "CC";
        default: throw new IllegalStateException("invalid enum");
    }
}

我在默认子句中抛出了一次异常!有人可以解释一下这在理论上是否可行以及如何实现吗?

例如,在 C++ 中,你可以有一个枚举变量,其值不是声明的枚举值,但我想在 Java 中你不能这样做,如果我错了,请纠正我。

最佳答案

我不明白这会如何失败,但我建议将您的枚举重构为:

enum MyEnum {
  A("AA"),
  B("BB"), 
  C("CC");

  private final String value;  

  public MyEnum(String value){
    this.value = value;
  }

  public String f(){
    return value;
  }
}

现在您仍然可以执行相同的操作,但添加新枚举 100% 安全

public void foo(MyEnum enum){
  System.out.println(enum.f());
}

关于Java switch 语句在枚举上获得默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462299/

相关文章:

java - <h :inputText> enabled/disabled - change background color

javascript - 如何在 React-Native/Metro 中调试 "Unexpected token ' .'"?

java - 为什么枚举可以有包私有(private)构造函数?

java - 强制 try block 在两者之间中断的最佳方法是什么?

java - 为什么我的代码不能发挥应有的作用? (文件写入器,jTable)

android - 获取选项卡式 Activity 中当前选项卡的编号

c++ - 如何从其值中获取枚举项名称

c - 索引到 C 中某些 `enum` 类型的值数组

java - IntelliJ IDEA - 显示异常跟踪

java - Android getOrientation 问题 - 沿轴镜像值