枚举类型为Class时如何使用Java反射?
时间:2020-03-06 14:47:37 来源:igfitidea点击:
我使用的常量是类的枚举。我需要在常量上调用方法,但无法引入编译时依赖性,并且枚举在运行时并不总是可用(可选安装的一部分)。因此,我想使用反射。
这很容易,但是我以前没有对枚举使用反射。
枚举看起来像这样:
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; } }
用反射调用常量方法的例子是什么?
解决方案
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())); } }