java - 通过反射获取枚举的值

标签 java reflection enums

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

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/

相关文章:

java - cronjob 执行时 shell 脚本失败,否则工作正常

java - Jgit中 'pull'命令的使用

java - 如何用 jmeter 中 java 函数/方法的结果替换部分 json 请求正文?

swift - 在 Swift 中获取函数的返回类型

ruby-on-rails - 在构造 SQL 查询时,ActiveRecord 是否处理按值查找 `enum` ?

c++ - 新的类型安全枚举是否定义为从 0 开始?

java - 如何将 ActionListener 添加到 ArrayList 中的按钮?

php - 在类中查找属性的范围

c# - 使用反射向字典添加值

c++ - 无法使用 'designFlags' 类型的右值初始化 'int' 类型的变量