如何根据值找到枚举?

时间:2013-10-30 08:18:34

标签: java enums

我正在使用(遗留的,不可更改的)枚举,如下所示:

enum MsgEnum {
   private int number;
   private int msg;

   MSG_OK("OK", 0);
   MSG_NOK("NOK, 1);
   //lots of other messages

   private MsgEnum(String msg, int number) {
      this.msg = msg;
      this.number = number;
   }
}

如果我有number,我怎样才能最好地找出与MsgEnum匹配的数字(假设它们是唯一的)?

除了以下之外还有更好的方法吗?

class MyEnumHelper() {

    public static MsgEnum MsgEnumfromNumber(int number) {
        for (MsgEnum m : MsgEnum.values()) {
            if (m.getNumber() == number) {
                return m;
            }
        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:6)

您可以在Helper中声明静态Map,并使用静态方法getMsgEnumFromInteger(int)访问它。类似的东西:

private static final Map<Integer, MsgEnum> INT_TO_ENUM = new HashMap<Integer, MsgEnum>();

static {
    for (MsgEnum msgE : MsgEnum.values) {
        INT_TO_ENUM.put(msgE.getNumber(), msgE);
    }
}

public static MsgEnum getByInt(int number) {
    return INT_TO_ENUM.get(number);
}

(对不起,如果有错误,目前还没有Java环境^^)