我有一个枚举,其中包含诸如dot_blue,dot_yellow,square_blue,square_yellow等元素。我也有一个字符串,例如字符串string =" dot_blue"。现在,我想根据字符串是什么来访问枚举。我懒得写所有否则语句(还有更多元素),并且在Java中使用反射很棘手,因为我想在Android Aswell上运行此代码。
那么,是否有其他更优雅的方式可以根据字符串是什么来访问我的枚举?我不知道,但我不是爪哇专家。因此,即使是"不",我也会为一个明确的答案感到高兴。
枚举在java 6中具有一个方法值(字符串名称),可以帮助您。
javadoc说
"用指定名称返回指定的枚举类型的枚举常数。该名称必须完全匹配用于声明此类枚举常数的标识符。"
参考:类枚举
public enum Color {
DOT_BLUE, DOT_YELLOW, SQUARE_BLUE, SQUARE_YELLOW;
public static void main(String[] args) {
Color color = Color.valueOf("DOT_BLUE");
System.out.println(color.equals(Color.DOT_BLUE));
System.out.println(color);
}
}
您可以实现类似的东西。
enum Pattern {
DOT_BLUE, DOT_YELLOW, SQUARE_BLUE, SQUARE_YELLOW;
Pattern fromString(String code) {
for(Pattern p : values()) {
if(p.toString().equals(code)) return p
}
return null;
}
}
也许如果您实现了null_pattern并改为返回它,也许更好。另外,如果有很多值,您可以通过创建内部地图并进行查找来缩短搜索时间。
作为乔恩·斯基特(Jon Skeet)提出的您可以使用myenum.valueof(name)。另一个选择是为每个枚举存储一个值:
public enum MyEnum {
DOT_BLUE ("blue"),
DOT_RED ("red");
private String name;
MyEnum(String name) {
this.name = name;
}
// provide a method to get the MyEnum based on some input
public static MyEnum getByName(String name) {
for (MyEnum myEnum : values()) {
if (myEnum.getName().equals(name)) {
return myEnum;
}
throw new IllegalArgumentException("No enum with the provided parameter");
}
}
}
当您拥有更多属性并希望根据所有枚举/其中的某些枚举找到一个枚举时,此选项更有用/功能。