Lyke Lyke - 6 months ago 15
Java Question

Convert integer value to matching Java Enum

I've an enum like this:

public enum PcapLinkType {
DLT_NULL(0)
DLT_EN10MB(1)
DLT_EN3MB(2),
DLT_AX25(3),
/*snip, 200 more enums, not always consecutive.*/
DLT_UNKNOWN(-1);
private final int value;

PcapLinkType(int value) {
this.value= value;
}
}


Now I get an int from external input and want the matching input - throwing an exception if a value does not exist is ok, but preferably I'd have it be
DLT_UNKNOWN
in that case.

int val = in.readInt();
PcapLinkType type = ???; /*convert val to a PcapLinkType */

Answer

You would need to do this manually, by adding a a static map in the class that maps Integers to enums, such as

private static final Map<Integer, PcapLinkType> intToTypeMap = new HashMap<Integer, PcapLinkType>();
static {
    for (PcapLinkType type : PcapLinkType.values()) {
        intToTypeMap.put(type.value, type);
    }
}

public static PcapLinkType fromInt(int i) {
    PcapLinkType type = intToTypeMap.get(Integer.valueOf(i));
    if (type == null) 
        return PcapLinkType.DLT_UNKNOWN;
    return type;
}