从其参数中获取ENUM类型

时间:2015-09-15 18:43:35

标签: java enums

假设我有一个类似于以下的枚举结构

public enum MyItems {
    pc("macbook"),
    phone("nokia"),
    food("sandwich"),
    animal("dog");

    private String item;
    MyStuff(String stf) {
        item = stf;
    }
    public String identify() {
        return item;
    }
}

现在,假设我想知道我拥有的项目是什么“类型”。例如,在“macbook”的情况下,这将产生pc。同样,“三明治”代表食品。

我有以下for循环来检查String是否属于枚举:

String currentItem;    //Some arbitrary string, such as "macbook"/"nokia", etc.
for(MyStuff stuff : MyStuff.values()) {
    if(stuff.identify().equals(currentItem)) {
        //PRINT OUT:
        //currentItem + " is a " + pc/phone/food/animal
    }
}

也就是说,我如何从枚举值的参数到它所代表的枚举值“type”。

这是所需的输出:

currentItem = "nokia"
>>>> nokia is a [phone]

3 个答案:

答案 0 :(得分:2)

您可以在枚举中添加一个启示查找方法:

public enum MyItems {
...

    public static MyItems resolve(String name) {
        for (MyItems item : values()) {
            if (item.identify().equals(name)) {
                return item;
            }
        }
        return null;
    }
}

用法:

String currentItem = "nokia";
MyItems item = MyItems.resolve(currentItem);
System.out.println(currentItem + " is a [" + item + "]");

答案 1 :(得分:1)

要使用当前代码获取所需的打印语句,只需使用:

String currentItem = "nokia";    //Some arbitrary string, such as "macbook"/"nokia", etc.
for(MyStuff stuff : MyStuff.values()) {
    if(stuff.identify().equals(currentItem)) {
        System.out.println(currentItem + " is a " + stuff);
    }
}

编辑:话虽如此,你可能应该像Peter建议的那样将其移到MyStuff

答案 2 :(得分:0)

您可以在switch语句中使用枚举,这使得它们非常快速且易于阅读。

for (MyStuff thing : getStuff()) {
switch (thing): {
case phone: //something
case pc:  //something else
default: //none
}