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

public enum MyEnum
{
    EnumValue1,
    EnumValue2
}


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

当前回答

Java枚举没有c++中那样的枚举到int的映射。

也就是说,所有枚举都有一个values方法,返回可能的枚举值数组,所以

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

应该工作。这有点讨厌,如果可能的话,最好不要尝试从int转换为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;
        }
}

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

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

在芬兰湾的科特林:

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)!!

我缓存这些值并创建一个简单的静态访问方法:

public static enum EnumAttributeType {
    ENUM_1,
    ENUM_2;
    private static EnumAttributeType[] values = null;
    public static EnumAttributeType fromInt(int i) {
        if(EnumAttributeType.values == null) {
            EnumAttributeType.values = EnumAttributeType.values();
        }
        return EnumAttributeType.values[i];
    }
}

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