通过反射获取枚举的值

我有一个这样声明的枚举:

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

}

输出为:RUNNING STOPPED IDLE

但是,我想使用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

}

以上是 通过反射获取枚举的值 的全部内容, 来源链接: utcz.com/qa/413087.html

回到顶部