给定特定枚举类型的数值,我该如何检索名称?

时间:2013-05-23 20:17:41

标签: java

我正在尝试设置我的枚举,以便它有一个名称列表,并在给定该值的情况下检索特定名称。

实施例: enum {香草,巧克力,草莓};

给定0,返回香草。 给出1,返回巧克力。 鉴于2,返回草莓。

我无法找到Java Enum类附带的任何方法来开箱即用。我正在考虑编写自己的,将值转储到数组中,然后使用二进制搜索返回它们,给定一个特定的数字。

是否有内置的内容会更好?

谢谢!

7 个答案:

答案 0 :(得分:3)

你必须在Enum中实现它。像这样:

public enum MyEnum {
  VANILLA(0), CHOCOLATE(1), STRAWBERRY(2);

  private int i;

  private MyEnum(int i) {
     this.i = i;
  }

  public static MyEnum getFoodById(int id) trhows IllegalArgumentException {
     MyEnum result = null;
     switch (id):
       case 0: {
         result = MyEnum.VANILLA;
         break;
       }
       case 1: {
         result = MyEnum.CHOCOLATE;
         break;
       }
       case 2: {
         result = MyEnum.STRAWBERRY;
         break;
       }
       default : { 
          throw new IllegalArgumentException("Invalid id ...");
       }
   }
   return result;
}

答案 1 :(得分:3)

如果您的ID与枚举项的位置相对应,则可以使用内置的values()ordinal() - 方法。

// to enum
int intValue = 0;
CustomEnum item = CustomEnum.values()[intValue];

// to int
CustomEnum item = CustomEnum.SOME_ITEM;
int intValue = item.ordinal();

答案 2 :(得分:2)

您可以使用EnumMap。您可以查看here以获取解决方案和示例。

答案 3 :(得分:1)

你也可以这样做:

public enum IntEnum {

Vanilla(0), Chocolate(1), Strawberry(2);

private int value;

IntEnum(int value) {
    this.value = value;
}

public int getValue() {
    return value;
}

public static IntEnum getEnum(int intValue) {
    Integer value = intValue;

    if (value == null)
        throw new IllegalArgumentException();
    for (IntEnum v : values())
        if (value.equals(v.getValue()))
            return v;
    throw new IllegalArgumentException();
}



public static void main(String[] args) {

    System.out.println(IntEnum.getEnum(1));         
}

}

答案 4 :(得分:0)

Enums允许内置函数。

public enum Flavor
{
    VANILLA("Vanilla"),
    CHOCOLATE("Chocolate"),
    STRAWBERRY("Strawberry");

    private final String desc;

    Flavor(String desc)
    {
        this.desc = desc;
    }

    public String getDesc()
    {
        return desc;
    }
}

答案 5 :(得分:0)

public enum Flavor {
    Vanilla, Chocolate, Strawberry
}

Flavor v = Flavor.values()[0];

String name = v.name(); // "Vanilla"

http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()

答案 6 :(得分:0)

使用values()结果:

enum Flavours {Vanilla, Chocolate, Strawberry}

assertTrue(Flavours.Vanilla == Flavours.values()[0]);