java - 打开自定义枚举值的值

标签 java enums

<分区>

Possible Duplicate:
using enum in switch/case

给定枚举

public enum ExitCodes {

    DESPITE_MULTIPLE_ATTEMPTS_CONNECTION_TO_SERVER_FAILED(-1),
    PROGRAM_FINISHED_SUCCESSFULLY(0),
    // ... more stuff

    private final int id;

    ExitCodes(final int id) {
        this.id = id;
    }

    public int getValue() {
        return id;
    }
}

作为另一个类(class)的一部分,我想

switch (exitCode) {
    case ExitCodes.PROGRAM_FINISHED_SUCCESSFULLY.getValue():
       // do stuff

失败,需要常量表达式

这是为什么?据我了解,ExitCodes 中分配给 id 的数值是 Constant (final)

请问如何纠正?

最佳答案

非映射方法是像 ExitCodes 中那样“遍历”枚举条目:

public static ExitCodes getByID(int id) {
   for (final ExitCodes element : EnumSet.allOf(ExitCodes.class)) {
    if (element.id == id) {
      return element;
    }
   }

   throw new IllegalArgumentException("Can't find " + id);
}

然后查找你可以做的:

switch (ExitCodes.getByID(exitCode)) {
    case PROGRAM_FINSHED_SUCCESSFULLY:
    ...

关于java - 打开自定义枚举值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203100/

相关文章:

java - Freemarker:如何使用枚举作为键来遍历 map

ios - 在 Objective C UIFontDescriptor.h 常量中使用枚举、uint32_t 和位移位

python - 比较时如何默认获取Enum值?

java - java.util.EnumSet<E> 是如何工作的?

java - 如何通过 Twilio SMS 在我的应用程序中执行代码

java - 如何在java中翻转句子中的两个单词

java - Android:每次我想登录时是否打开文件资源

java - 为什么我的 tomcat 服务器每 41 分钟就停止一次?

java - 当每个人都有不同的概率时,我如何选择一个随机枚举?

java selenium - 隐藏输入值