2017-04-20 1 views
0

Ich habe eine Enum-KlasseWie abzubilden Aufzählungen auf ganze Zahlen

public enum PacketTypes { 
     NONE, //0 
     TEXT, //1 
     ACCEL, //2 
     GYRO, //3 
     MAG, //4 
     LOCATION, //5 
     QUAT, //6 
     COLOR, //7 
     BUTTON //8 
    } 

Ich bin neugierig, wie diese Aufzählungen zu Ints abzubilden, z

System.out.println(PacketTypes.LOCATION); // Prints a 5 

Ich hoffe, das macht Sinn.

+0

'System.out.println (PacketTypes.LOCATION.ordinal());' – 4castle

+1

Hilft dies? Https: //docs.oracle.com/javase/tutorial/java/javaOO/enum.h tml – Chris

+0

Das klingt wie ein [XY-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378). Warum möchten Sie Ihre Enum-Werte wie ganze Zahlen behandeln? – VGR

Antwort

2

Sie können die ordinal() Methode in integrierten verwenden, die mit Aufzählungen kommt:

System.out.println(PacketTypes.LOCATION.ordinal()); 

Sie auch in die andere Richtung gehen kann:

int typeIndex = 3; 
PacketTypes type = PacketTypes.values()[typeIndex]; // GYRO 
0

Sie Ihre toString-Methode außer Kraft setzen können, wenn Sie möchten, dass Genaue Funktionalität unter Beibehaltung Ihrer eigenen Ganzzahlen:

@Override 
public String toString() { 
switch (name()) { 
    case TEXT: return "1"; 
    case ACCEL: return "2"; 
     ... 
    default: return "0"; 
} 
} 

Natürlich benötigen Sie eine name() -Methode, wenn Sie noch keine haben.

0

Neben Ted ‚s Antwort, wenn Sie durch Ihre Enum iterieren möchten, verwenden Sie values()

for (PacketTypes packet : PacketTypes.values()) { 
    System.out.println(packet); 
} 

Oder ein bestimmtes Element zugreifen, indem PacketTypes.values()[indexOfElement]

0

Diese

auch hilfreich
int index = Arrays.asList(PacketTypes.values()).indexOf(PacketTypes. LOCATION);