使用字符串调用枚举类型

时间:2014-02-03 15:05:44

标签: java android enums

我有一个包含DOT_BLUE,DOT_YELLOW,SQUARE_BLUE,SQUARE_YELLOW等元素的枚举。我也有一个字符串,比如String string =“DOT_BLUE”。现在我想根据字符串的内容访问枚举。我懒得写所有if else语句(还有更多的元素)并且在Java中使用反射是棘手的,因为我想在android上运行这段代码。

根据字符串的不同,还有其他更优雅的方式来访问我的枚举吗?我不知道,但我不是Java专家。所以我很高兴得到一个明确的答案,即使它是“不”。

3 个答案:

答案 0 :(得分:1)

枚举在java 6中有一个方法valueOf(String name)可以帮助你。

JavaDoc说

“返回具有指定名称的指定枚举类型的枚举常量。该名称必须与用于声明此类型中的枚举常量的标识符完全匹配。”

参考:Class Enum

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);
    }

}

答案 1 :(得分:-1)

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");
        } 
    }

}

当您拥有更多属性并希望根据所有属性/其中一些来查找枚举时,此选项更有用/更强大。

答案 2 :(得分:-1)

你可以实现类似的东西。

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并返回它,可能会更好。此外,如果有许多值,您可以通过创建内部Map并执行查找来缩短搜索时间。