1

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

我有一个像这样的枚举:

public enum EnumTest {
    ONE, TWO, THREE
}

我如何有一个像 1=ONE 2=TWO 3=THREE 这样的整数

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

4

5 回答 5

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;
    }
}

考虑一下看到此枚举的未来开发人员,如果您留下未记录的values()使用,任何人都可以通过添加新项目来破坏它。因为没有文档强制元素的顺序。

于 2012-09-05T11:33:15.860 回答
3

您需要将intenum值相关联。

你可以做

static final EnumTest[] VALUE = { null, ONE, TWO, THREE };

return VALUE[num];

或者

return EnumTest.values()[num-1];

或使用地图。

于 2012-09-05T11:31:48.040 回答
0

像这样得到它EnumTest.values()[Number-1],其中 Number 是你的数字(即 1、2、3)。

(从数字中减去 1,因为例如,ONE它将在索引 0 处,并且EnumTest.values()[1]会给你TWO。)

于 2012-09-05T11:31:29.623 回答
0

如果您只想要序数,这里有一些有用的信息:

  • 您可以使用例如 EnumTest.ONE.ordinal() 获得枚举常量的序数
  • 您可以使用 EnumTest.values() 检索所有枚举常量

从那里,你可以做你想做的事。

如果要添加具有任意值的属性,可以在枚举中创建属性 + 构造函数 + getter:

public enum EnumTest {
    THREE(3), ONE(1), TWO(2);
    private int val;
    EnumTest(int val) { this.val = val; }
    int getVal() { return val; }
}

这更稳定(如果您重命名/插入/移动它们,值会保持不变)。

但是你确定你真的需要得到一个 int 值吗?您应该尽可能使用枚举常量,例如 EnumTest.THREE 而不是 3。

我建议谷歌搜索有关 Java 枚举的各种教程。

于 2012-09-05T11:36:23.687 回答
0

尝试EnumTest.ordinal()获取 int 值。它将从 0 开始。
要从值中获取枚举,您可以使用EnumTest.values()[i].

谢谢。

于 2012-09-05T11:37:29.830 回答