Java自定义枚举值到枚举

Java自定义枚举值到枚举,java,enums,Java,Enums,我有这样的枚举 public enum Sizes { Normal(232), Large(455); private final int _value; Sizes(int value) { _value = value; } public int Value() { return _value; } } 现在我可以调用size.Normal.Value()来获取整数值,但如何将整数值转换回enum呢 我

我有这样的枚举

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

    private final int _value;

    Sizes(int value) {
        _value = value;
    }

    public int Value() {
        return _value;
    }
}
现在我可以调用size.Normal.Value()来获取整数值,但如何将整数值转换回enum呢

我现在做的是:

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

但这是唯一的办法吗?Java就是这样工作的?

是的,它就是这样工作的,通常是通过向枚举添加一个静态方法。想想看;枚举中可以有10个字段。您希望Java为所有这些设置查找吗


这里的要点是Java枚举没有“值”。他们有身份和序号,加上你为自己添加的任何内容。这与C语言不同,它遵循C++中任意的整数值。

自从我上次用java以来,已经有一段时间了,但是如果我记得正确的话,你的代码<值> <代码>字段和枚举的顺序之间没有关系。例如,您可以有两个具有相同
\u值的条目。正如@bmargulies所指出的,枚举中可以有许多字段,并且没有任何东西限制您对每个(或所有)字段使用不同的值


另见。显然,您不能直接设置条目的序号。

我试图将静态哈希映射放入他的枚举中,但似乎不允许您从枚举构造函数中填充它。1+我仍然更喜欢C#处理枚举的方式。快多了。Enum假设是一个整数标识符,而不是整个类:),您可能需要在静态块中初始化它。静态私有HashMap map=新HashMap;然后把ctor?@气垫船放满了EEL:我也试过了,它说不能引用initializerSee中的静态枚举字段Sizes.ValuesHolder。这可能是重复的,这就是为什么我问的原因,我想java中可能有内置的支持,比如C,但我必须写所有东西。它就像在C++中工作一样