2017-04-20 87 views
0

我有一个枚举类如何枚举映射到整数

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

我很好奇,如何将这些枚举到整数,例如地图

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

我希望有道理。

+0

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

+1

这有帮助吗?https://docs.oracle.com/javase/tutorial/java/javaOO/enum.h tml – Chris

+0

这听起来像是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378)。为什么你想要像整数一样对待你的枚举值? – VGR

回答

2

您可以使用内置在自带的枚举ordinal()方法:

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

你也可以走另外一条道路:

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

你可以重写你的toString方法,如果你想要的确切的功能,同时保持您自己的一套整数:

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

当然如果你还没有的话,你需要一个name()方法。

0

除了Ted的答案,如果你想通过枚举迭代,使用values()

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

或者通过PacketTypes.values()[indexOfElement]

0

访问特定的元素,这也是有帮助的

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