Frage

ich wurde mit einem Enum, in dem die Konstante a Klasse war. Ich brauchte eine Methode auf der konstant zu berufen, konnte aber nicht eine Kompilierung Abhängigkeit und die Enum war nicht immer zur Laufzeit verfügbar (Teil optional installieren) einzuführen. Deshalb wollte ich Reflektion verwenden.

Das ist einfach, aber ich hatte noch nicht verwendet Reflexion mit Aufzählungen.

Die Enum sah etwa so aus:

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

}

Was ist ein Beispiel, ein Verfahren der konstant mit Reflexion des Aufrufens?

War es hilfreich?

Lösung

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top