Enum with negative/gap value in Java

I have a problem with enum in Java. I have an enum that starts from -1:

    public enum AipType {
        Unknown(-1),
        None(0),
        AipMod(1),
        AipNoMod(2);

        private final int id;
        AipType(int id) {this.id = id;}
        public int getValue() {return id;}
    }

The problem is when I use this code to initialize a var of AipType

AipType at = AipType.getValues()[index];

where index is a number in the interval [-1,0,1,2] the -1 mess up the value. i.e. 0 returns Unknown, 1 returns AipMod and 2 returns AipNoMod.

I used this implementation because I need to set manually the numeric value for each enum case. In other case I have a gap beetwen the values so I have the same problem: I cannot use values() and then access with [ ].

I tried to initialize in this way

AipType at = AipType(index);

but doesn't work.

Ideas ? Thanks...

Jon Skeet
people
quotationmark

Just have a Map<Integer, AipType> instead of using values(), and expose access to it via a method:

public enum AipType {
    UNKNOWN(-1),
    NONE(0),
    MOD(1),
    NO_MOD(2);

    private static final Map<Integer, AipType> VALUE_TO_ENUM_MAP;
    private final int value;

    static {
        VALUE_TO_ENUM_MAP = new HashMap<>();
        for (AipType type : EnumSet.allOf(AipType.class)) {
            VALUE_TO_ENUM_MAP.put(type.value, type);
        }
    }

    private AipType(int value) {
        this.value = value;
    }

    public int getValue() {
        return id;
    }

    public static AipType forValue(int value) {
        return VALUE_TO_ENUM_MAP.get(value);
    }
}

That will be completely flexible about values - or you could still use an array and just offset it appropriately.

people

See more on this question at Stackoverflow