在Java中给定以下enum,将Int类型转换为enum的正确方法是什么?
public enum MyEnum
{
EnumValue1,
EnumValue2
}
MyEnum enumValue = (MyEnum) x; //Doesn't work???
在Java中给定以下enum,将Int类型转换为enum的正确方法是什么?
public enum MyEnum
{
EnumValue1,
EnumValue2
}
MyEnum enumValue = (MyEnum) x; //Doesn't work???
当前回答
你可以遍历enum的values(),并将enum的整数值与给定id进行比较,如下所示:
public enum TestEnum {
None(0),
Value1(1),
Value2(2),
Value3(3),
Value4(4),
Value5(5);
private final int value;
private TestEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static TestEnum getEnum(int value){
for (TestEnum e:TestEnum.values()) {
if(e.getValue() == value)
return e;
}
return TestEnum.None;//For values out of enum scope
}
}
并像这样使用: TestEnum x = TestEnum. getenum(4);//返回TestEnum. getenum;Value4 我希望这对你有所帮助;)
其他回答
你可以这样试试。 用元素id创建Class。
public Enum MyEnum {
THIS(5),
THAT(16),
THE_OTHER(35);
private int id; // Could be other data type besides int
private MyEnum(int id) {
this.id = id;
}
public static MyEnum fromId(int id) {
for (MyEnum type : values()) {
if (type.getId() == id) {
return type;
}
}
return null;
}
}
现在使用id作为int来获取这个Enum。
MyEnum myEnum = MyEnum.fromId(5);
这不是通常做的事情,所以我会重新考虑。但话虽如此,基本操作是:int——> enum使用EnumType.values()[intNum],和enum——> int使用enumInst.ordinal()。
但是,由于values()的任何实现都只能提供数组的副本(java数组从来不是只读的),因此最好使用EnumMap来缓存enum——> int映射。
在芬兰湾的科特林:
enum class Status(val id: Int) {
NEW(0), VISIT(1), IN_WORK(2), FINISHED(3), CANCELLED(4), DUMMY(5);
companion object {
private val statuses = Status.values().associateBy(Status::id)
fun getStatus(id: Int): Status? = statuses[id]
}
}
用法:
val status = Status.getStatus(1)!!
Java枚举没有c++中那样的枚举到int的映射。
也就是说,所有枚举都有一个values方法,返回可能的枚举值数组,所以
MyEnum enumValue = MyEnum.values()[x];
应该工作。这有点讨厌,如果可能的话,最好不要尝试从int转换为enum(反之亦然)。
你可以遍历enum的values(),并将enum的整数值与给定id进行比较,如下所示:
public enum TestEnum {
None(0),
Value1(1),
Value2(2),
Value3(3),
Value4(4),
Value5(5);
private final int value;
private TestEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static TestEnum getEnum(int value){
for (TestEnum e:TestEnum.values()) {
if(e.getValue() == value)
return e;
}
return TestEnum.None;//For values out of enum scope
}
}
并像这样使用: TestEnum x = TestEnum. getenum(4);//返回TestEnum. getenum;Value4 我希望这对你有所帮助;)