如何从java中的整数获取枚举?

gur*_*gui 1 java

可能重复:
如何从Java中的索引获取枚举值?

我有一个像:

public enum EnumTest {
    ONE, TWO, THREE
}
Run Code Online (Sandbox Code Playgroud)

我有一个整数,如1 = ONE 2 = TWO 3 = THREE

现在我得到一个像2这样的整数,并希望从中生成EnumTest,它应该返回TWO 如何做到这一点?

jol*_*ier 6

或者,为了更灵活:

public enum EnumTest {
    ONE(1), TWO(2), THREE(3);

    private int value;


    EnumTest(int value) {
       this.value = value;
    }

    static EnumTest getByValue(int i) {
      for (EnumTest e : values()) {
          if (e.value == i) {
              return e;
          }
      }
      return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

想想看到这个枚举的未来开发者,如果你留下一个没有文档的values()用途,任何人都可以通过添加新项目来打破它.因为没有文档强制执行元素的顺序.

  • @eboix对于O(1),你可以使用预先填充静态块的`Map <Integer,EnumTest>`.那么`getByValue(int i)`的主体就是`return map.get(i);`. (2认同)