gpt4 book ai didi

java - 枚举类型为 Class 时如何使用 Java 反射?

转载 作者:IT老高 更新时间:2023-10-28 20:57:58 25 4
gpt4 key购买 nike

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

这很简单,但我之前没有使用枚举的反射。

枚举看起来像这样:

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()));
}

}

关于java - 枚举类型为 Class 时如何使用 Java 反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/140537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com