首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当枚举类型为Class时,如何使用Java反射?

当枚举类型为Class时,如何使用Java反射?
EN

Stack Overflow用户
提问于 2008-09-26 16:26:46
回答 1查看 35.3K关注 0票数 21

我使用了一个枚举,其中的常量是一个类。我需要调用常量上的方法,但无法引入编译时依赖项,并且枚举在运行时并不总是可用(可选安装的一部分)。因此,我想使用反射。

这很简单,但我以前没有在枚举中使用过反射。

枚举看起来像这样:

public enum PropertyEnum {

  SYSTEM_PROPERTY_ONE("property.one.name", "property.one.value"),

  SYSTEM_PROPERTY_TWO("property.two.name", "property.two.value");

  private String name;  

  private String defaultValue;

  PropertyEnum(String name) {
    this.name = name;
  }

  PropertyEnum(String name, String value) {
    this.name = name;
    this.defaultValue = value;
  } 

  public String getName() {
    return name;
  }

  public String getValue() {
    return System.getProperty(name);
  }

  public String getDefaultValue() {
    return defaultValue;
  }  

}

使用反射调用常量的方法的示例是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-09-26 16:29:33

import java.lang.reflect.Method;

class EnumReflection
{

  public static void main(String[] args)
    throws Exception
  {
    Class<?> clz = Class.forName("test.PropertyEnum");
    /* Use method added in Java 1.5. */
    Object[] consts = clz.getEnumConstants();
    /* Enum constants are in order of declaration. */
    Class<?> sub = consts[0].getClass();
    Method mth = sub.getDeclaredMethod("getDefaultValue");
    String val = (String) mth.invoke(consts[0]);
    /* Prove it worked. */
    System.out.println("getDefaultValue " + 
      val.equals(PropertyEnum.SYSTEM_PROPERTY_ONE.getDefaultValue()));
  }

}
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/140537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档