usar recorrer programacion estados enum como clase java reflection enums

recorrer - ¿Cómo usar la reflexión de Java cuando el tipo enum es una clase?



enum programacion (1)

Estaba usando una enumeración en la que la constante era una clase. Necesitaba invocar un método en la constante pero no podía introducir una dependencia de tiempo de compilación y la enumeración no siempre estaba disponible en el tiempo de ejecución (parte de la instalación opcional). Por lo tanto, quería usar la reflexión.

Esto es fácil, pero no había usado el reflejo con enumeraciones antes.

La enum se veía algo como esto:

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

¿Qué es un ejemplo de invocación de un método de la constante usando la reflexión?


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