2012-05-19 199 views
7

我有枚举这样Java自定义枚举值枚举

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的工作原理?

+1

[Java枚举反向查找最佳实践]可能的重复(http://stackoverflow.com/questions/5316311/java-enum-reverse-look-up-best-practice) – bmargulies

回答

8

是的,这是如何完成的,通常通过向枚举中添加静态方法。想想看,你可以在枚举上有10个字段。你期望Java为它们设置查找吗?

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

+2

我试图把一个静态HashMap放入他的枚举中,但看起来你不能从enum构造函数中填充它。 1 + –

+0

以及我仍然喜欢C#如何处理枚举。它快得多。枚举假设是一个整数标识符,而不是整个类:) – xmen

+0

您可能需要在静态块中初始化它。静态私有HashMap map = new HashMap ;然后做放入ctor? – bmargulies

1

自从我上次使用Java之后已经有一段时间了,但是如果我没有记错,_value字段和枚举的序号之间没有关系。例如,AFAIK可以有两个条目,例如_value。正如@bmargulies指出的那样,你可以在枚举中有许多字段,并且没有什么限制你为每个(或全部)使用不同的值。请参阅this related question。显然,你不能直接设置条目的序号。

+0

多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成在多数民众赞成,这就是为什么我问,它就像使用C++ lol一样工作 – xmen