可能重复:
如何从 Java 中的索引中获取枚举值?
我有一个像这样的枚举:
public enum EnumTest {
ONE, TWO, THREE
}
我如何有一个像 1=ONE 2=TWO 3=THREE 这样的整数
现在我得到一个像 2 这样的整数并想从中生成 EnumTest 并且它应该返回 TWO 如何做到这一点?
可能重复:
如何从 Java 中的索引中获取枚举值?
我有一个像这样的枚举:
public enum EnumTest {
ONE, TWO, THREE
}
我如何有一个像 1=ONE 2=TWO 3=THREE 这样的整数
现在我得到一个像 2 这样的整数并想从中生成 EnumTest 并且它应该返回 TWO 如何做到这一点?
或者,为了获得更大的灵活性:
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()
使用,任何人都可以通过添加新项目来破坏它。因为没有文档强制元素的顺序。
您需要将int
与enum
值相关联。
你可以做
static final EnumTest[] VALUE = { null, ONE, TWO, THREE };
return VALUE[num];
或者
return EnumTest.values()[num-1];
或使用地图。
像这样得到它EnumTest.values()[Number-1]
,其中 Number 是你的数字(即 1、2、3)。
(从数字中减去 1,因为例如,ONE
它将在索引 0 处,并且EnumTest.values()[1]
会给你TWO
。)
如果您只想要序数,这里有一些有用的信息:
从那里,你可以做你想做的事。
如果要添加具有任意值的属性,可以在枚举中创建属性 + 构造函数 + 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 枚举的各种教程。
尝试EnumTest.ordinal()
获取 int 值。它将从 0 开始。
要从值中获取枚举,您可以使用EnumTest.values()[i]
.
谢谢。