java – 通过反射获取枚举值

前端之家收集整理的这篇文章主要介绍了java – 通过反射获取枚举值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个这样的枚举:
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
}
原文链接:https://www.f2er.com/java/126419.html

猜你在找的Java相关文章