390 Stimmen

Cast Int zu enum in Java

Was ist der richtige Weg, um in Java ein Int in ein enum umzuwandeln, wenn das folgende enum vorliegt?

public enum MyEnum
{
    EnumValue1,
    EnumValue2
}

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

655voto

Thomas Punkte 84982

Versuchen Sie MyEnum.values()[x] donde x muss sein 0 o 1 , d. h. eine gültige Ordnungszahl für diese Aufzählung.

Beachten Sie, dass in Java Enums eigentlich Klassen sind (und Enum-Werte somit Objekte) und Sie daher eine int oder sogar Integer zu einer Aufzählung.

190voto

Lorenzo Polidori Punkte 9902

MyEnum.values()[x] ist eine teure Operation. Wenn die Leistung ein Problem darstellt, sollten Sie vielleicht so vorgehen:

public enum MyEnum {
    EnumValue1,
    EnumValue2;

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

54voto

Doctor Punkte 738

Wenn Sie Ihre Integer-Werte angeben möchten, können Sie eine Struktur wie die folgende verwenden

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

54voto

Piyush Ghediya Punkte 1584

Sie können dies so versuchen.
Klasse mit Element-ID erstellen.

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

Holen Sie jetzt dieses Enum mit id als int.

MyEnum myEnum = MyEnum.fromId(5);

22voto

ossys Punkte 4117

Ich speichere die Werte und erstelle eine einfache statische Zugriffsmethode:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X