【发布时间】:2013-05-23 20:17:41
【问题描述】:
我正在尝试设置我的枚举,使其具有名称列表并检索给定值的特定名称。
示例: 枚举 {香草、巧克力、草莓};
给定 0,返回 Vanilla。 给定 1,返回 Chocolate。 给定 2,返回草莓。
我还没有找到任何随 Java Enum 类一起提供的开箱即用的方法。我正在考虑编写自己的,将值转储到数组中,然后使用二进制搜索返回它们,给定一个特定的数字。
有没有内置的东西会更好?
谢谢!
【问题讨论】:
标签: java
我正在尝试设置我的枚举,使其具有名称列表并检索给定值的特定名称。
示例: 枚举 {香草、巧克力、草莓};
给定 0,返回 Vanilla。 给定 1,返回 Chocolate。 给定 2,返回草莓。
我还没有找到任何随 Java Enum 类一起提供的开箱即用的方法。我正在考虑编写自己的,将值转储到数组中,然后使用二进制搜索返回它们,给定一个特定的数字。
有没有内置的东西会更好?
谢谢!
【问题讨论】:
标签: java
如果你的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();
【讨论】:
你必须在枚举中实现它。像这样:
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;
}
【讨论】:
i 应为id。
您可以使用 EnumMap。您可以查看here 以获取解决方案和示例。
【讨论】:
你也可以这样做:
公共枚举 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));
}
}
【讨论】:
int而不是Integer,避免null值传递给你的方法的可能性。
枚举确实允许内置函数。
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]);
【讨论】: