枚举的Java自定义枚举值

时间:2012-05-19 02:13:50

标签: java enums

我喜欢这样的

public enum Sizes {
    Normal(232), Large(455);

    private final int _value;

    Sizes(int value) {
        _value = value;
    }

    public int Value() {
        return _value;
    }
}

现在我可以调用Sizes.Normal.Value()来获取整数值,但是如何将整数值转换回枚举?

我现在所做的是:

public Sizes ToSize(int value) {
    for (Sizes size : Sizes.values()) {
        if (size.Value() == value)
            return size;
    }
    return null;
}

但这只是这样做的方法吗?这就是Java的工作方式吗?

2 个答案:

答案 0 :(得分:8)

是的,它是如何完成的,通常是通过向枚举添加静态方法。想一想;你可以在枚举上有10个字段。您是否希望Java为所有这些设置查找?

这里的要点是Java枚举没有'值'。他们有身份和序数,加上你为自己添加的任何东西。这与C#不同,C#在C ++之后具有任意整数值。

答案 1 :(得分:1)

自从我上次使用Java以来​​已经有一段时间了,但是如果我没记错的话,你的_value字段与枚举的序数之间没有任何关系。例如,AFAIK可以有两个具有相同_value的条目。正如@bmargulies指出的那样,你可以在枚举中包含许多字段,并且没有任何限制你为每个(或全部)使用不同的值。

另见this related question。显然,您无法直接设置条目的序数。