我有一个这样的枚举:
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
已停止
闲
但是,我想要使用Strings SystemRunning,tmpIdle等.
非常感谢你提前.
解决方法
首先,您需要将密钥设为非静态变量.
private String key; // I made it private on purpose
然后你需要在你的枚举中添加一个getter方法,它将返回密钥
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 }