我有一个这样声明的枚举:
public enum Mode{
RUNNING("SytemRunning"),
STOPPED("SystemStopped"),
IDLE("tmpIdle");
public static String key;
private Mode(String key){
this.key = key;
}
}
现在,我想通过反射获取此枚举的键(SystemRunning、SystemStopped、tmpIdle):
Class<?> c = Class.forName("Mode");
Object[] objects = c.getEnumConstants();
// now this is not what I want, but almost
for(Object obj : objects){
System.out.println("value : " + obj);
}
输出是: 运行 停止 空闲
但是,我想要 Strings SystemRunning、tmpIdle 等。
非常感谢您。
最佳答案
首先,您需要将key
设为非静态变量。
private String key; // I made it private on purpose
然后你需要在你的枚举中添加一个 getter 方法,它将返回 key
public String getKey() {
return key;
}
然后将您的 for
循环更改为类似这样的内容。
for (Object obj : objects) {
Class<?> clzz = obj.getClass();
Method method = clzz.getDeclaredMethod("getKey");
String val = (String) method.invoke(obj);
System.out.println("value : " + val); // prints SytemRunning, SystemStopped and tmpIdle
}
关于java - 通过反射获取枚举的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260011/