【发布时间】:2010-03-08 12:11:19
【问题描述】:
我已经这样定义了我的枚举。
public enum UserType {
RESELLER("Reseller"),
SERVICE_MANAGER("Manager"),
HOST("Host");
private String name;
private UserType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
从枚举值中获取键值对的最简单方法应该是什么?
我要创建的输出映射应该是这样的
key = Enum(example:- HOST)
value = Host
我要定义的地图是
Map<String, String> constansts = new HashMap<String, String>();
回答:我做了什么
我创建了一个通用方法来访问任何枚举并将值从该枚举更改为映射。我得到了这个想法,形成一个代码片段,可以在任何其他线程中找到。
public static <T extends Enum<T>> Map<String, String> getConstantMap(
Class<T> klass) {
Map<String, String> vals = new HashMap<String, String>(0);
try {
Method m = klass.getMethod("values", null);
Object obj = m.invoke(null, null);
for (Enum<T> enumval : (Enum<T>[]) obj) {
vals.put(enumval.name(), enumval.toString());
}
} catch (Exception ex) {
// shouldn't happen...
}
return vals;
}
现在,在这之后,我要做的就是使用所有枚举结构调用这个方法,然后我就完成了。
还有一件事
要完成这项工作,我必须像这样 orverride toString 方法
public String toString() {
return name;
}
谢谢。
【问题讨论】:
-
你希望枚举还是字符串作为键?
-
除了那些反射的东西,你可以做
klass.getEnumConstants()