非序数INT作为枚举

时间:2013-12-15 03:36:04

标签: java enums

请考虑以下java enum:

public enum carrier {
    Default(0),
    CarrierOne(1),
    CarrierTwo(2),
    CarrierWhoKnows(102312);
    private final int value;
    private static final Map<Integer, carrier> carrierMap = new HashMap<Integer, carrier>();

    static {
        for (carrier type : carrier.values()) {
            carrierMap.put(type.value, type);
        }
    }

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

    public static int getIntValue(int value) {
        return value;
    }

    public static carrier getStringValue(int value) {
        return carrierMap.get(value);
    }
}   

我需要的是让getIntValue像这样返回值 (即,102312)然而,作为枚举而不是int。可能吗 将int值102312转换为枚举。 请注意,我不是指顺序(我们不使用它), 或者getStringValue中正确返回的字符串值。 我指的是将值102312作为枚举而不是int返回。

先谢谢,

尼克。

1 个答案:

答案 0 :(得分:1)

如果我理解你,你只想通过它获得enum成员的值。

public static carrier getStringValue(int value) {
    for(carrier c : carrier .values()){
        if(c.value == value) return c;
    }
    throw new IllegalArgumentException("Got illegal value");
}

请检查您的代码是否更具可读性。更改方法名称,重命名枚举名称(必须是Carrier),考虑getIntValue方法签名和实现。看起来它应该与getStringValue相反并返回枚举成员的int值

public static int getIntValue(carrier c) {
   if(c == null) throw new IllegalArgumentException("Got null, expected carrier");     
   return c.value;
}