我正在尝试设置我的枚举,以便它具有名称列表并在给定该值的情况下检索特定名称。
示例:枚举 {香草,巧克力,草莓};
给定 0,返回香草。给定 1,返回 Chocolate。给定 2,返回草莓。
我还没有找到 Java Enum 类附带的任何方法来开箱即用地执行此操作。我正在考虑编写我自己的,将值转储到一个数组中,然后使用二进制搜索返回它们,给定一个特定的数字。
有没有内置的东西会更好?
谢谢!
我正在尝试设置我的枚举,以便它具有名称列表并在给定该值的情况下检索特定名称。
示例:枚举 {香草,巧克力,草莓};
给定 0,返回香草。给定 1,返回 Chocolate。给定 2,返回草莓。
我还没有找到 Java 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;
}
如果您的 id 对应于枚举项的位置,则可以使用内置values()和ordinal()-Methods。
// to enum
int intValue = 0;
CustomEnum item = CustomEnum.values()[intValue];
// to int
CustomEnum item = CustomEnum.SOME_ITEM;
int intValue = item.ordinal();
您可以使用枚举映射。您可以在此处查看解决方案和示例。
你也可以这样做:
公共枚举 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));         
}
}
枚举确实允许内置函数。
public enum Flavor
{
    VANILLA("Vanilla"),
    CHOCOLATE("Chocolate"),
    STRAWBERRY("Strawberry");
    private final String desc;
    Flavor(String desc)
    {
        this.desc = desc;
    }
    public String getDesc()
    {
        return desc;
    }
}
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()
使用 values() 结果:
enum Flavours {Vanilla, Chocolate, Strawberry}
assertTrue(Flavours.Vanilla == Flavours.values()[0]);