在Java中给定以下enum,将Int类型转换为enum的正确方法是什么?

public enum MyEnum
{
    EnumValue1,
    EnumValue2
}


MyEnum enumValue = (MyEnum) x; //Doesn't work???

当前回答

如果你想给你的整数值,你可以使用如下结构

public enum A
{
        B(0),
        C(10),
        None(11);
        int id;
        private A(int i){id = i;}

        public int GetID(){return id;}
        public boolean IsEmpty(){return this.equals(A.None);}
        public boolean Compare(int i){return id == i;}
        public static A GetValue(int _id)
        {
            A[] As = A.values();
            for(int i = 0; i < As.length; i++)
            {
                if(As[i].Compare(_id))
                    return As[i];
            }
            return A.None;
        }
}

其他回答

myenumn .values()[x]是一个开销很大的操作。如果性能是一个问题,你可能会想这样做:

public enum MyEnum {
    EnumValue1,
    EnumValue2;

    public static MyEnum fromInteger(int x) {
        switch(x) {
        case 0:
            return EnumValue1;
        case 1:
            return EnumValue2;
        }
        return null;
    }
}

尝试myenumn .values()[x],其中x必须为0或1,即枚举的有效序数。

注意,在Java中枚举实际上是类(enum值因此是对象),因此您不能将int甚至Integer强制转换为enum。

如果你想给你的整数值,你可以使用如下结构

public enum A
{
        B(0),
        C(10),
        None(11);
        int id;
        private A(int i){id = i;}

        public int GetID(){return id;}
        public boolean IsEmpty(){return this.equals(A.None);}
        public boolean Compare(int i){return id == i;}
        public static A GetValue(int _id)
        {
            A[] As = A.values();
            for(int i = 0; i < As.length; i++)
            {
                if(As[i].Compare(_id))
                    return As[i];
            }
            return A.None;
        }
}

一个好的选择是避免从int转换为enum:例如,如果您需要最大值,您可以比较x.o ordinal()和y.o ordinal()并相应地返回x或y。(您可能需要重新排序您的值,使这样的比较有意义。)

如果这是不可能的,我将存储myenumn .values()到一个静态数组。

Use MyEnum enumValue = MyEnum.values()[x];