如何将枚举类型存储到地图中?

时间:2014-06-18 22:32:39

标签: java enums

我正在尝试存储和检索枚举类,以便稍后可以找到正确的类型(基于配置)并在其上调用ValueOf来解析字符串。我怎么把/得到然后再调用ValueOf?

在伪代码中,它看起来像这样:

enum MyType { VAL1, VAL2 };
enum MyColors { BLUE, RED };
Map<String, Class> map = Maps.newHashMap();
map.put("key1", MyType.class);      //this is the MyType enum above
map.put("colors", MyColors.class);  //this is the MyColors enum above
...
String inputType = "colors";
String inputValue = "BLUE";
Class c = map.get(inputType);
assertEquals(MyColors.BLUE, c.ValueOf(inputValue));  //here I want MyColors.ValueOf() to get called
Class c2 = map.get("key1");
assertEquals(MyType.VAL1, c.ValueOf("VAL1"));  //here I want MyType.ValueOf() to get called

我该怎么做?

为了说明为什么我这样做 - 我有多个这样的枚举类型,我得到一个输入,告诉我它是什么样的枚举(在文本中)和枚举中的一个值,所以我想要从地图中查找枚举类,然后在其上调用静态ValueOf,它将正确解析。

注意 - 我不想在地图中存储MyType对象,我想存储类引用

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用 java.lang.Enum.valueOf(Class enumType,String name)



    enum MyType { VAL1, VAL2 };
    Map enumMap = Maps.newHashMap();
    map.put("key1", MyType.class);
    ...
    Class c = map.get("key1");
    assertEquals(MyType.VAL1, Enum.valueOf(c, "VAL1"));

答案 1 :(得分:0)

public enum MyType {
    VAL1("value1"),
    VAL2("value2");

    private valueString;

    private enum MyType(String val) {
        valueString = val;
    }

    @Override
    public String toString() {
        return valueString;
    }
}

看起来您希望将String用作键,因此请定义MyType枚举,然后设置并获取值:

Map<String, MyType> enumMap = new HashMap<String, MyType>();
enumMap.put("key", MyType.VAL1);

...

MyType keyVal = enumMap.get("key1");
String settingValue = keyVal.toString();  // will be "value1"

答案 2 :(得分:0)

不要使用Class作为第二种类型,而是使用你的枚举类型。

enum MyType { VAL1, VAL2 };

public static void main (String args[]){
    Map<String,MyType> map = new HashMap<String,MyType>();
}