Java – How to use Java reflection when the enum type is a Class


I was using an enum in which the constant was a Class. I needed to invoke a method on the constant but could not introduce a compile time dependency and the enum was not always available at runtime (part of optional install). Therefore, I wanted to use reflection.

This is easy, but I hadn't used reflection with enums before.

The enum looked something like this:

public enum PropertyEnum {


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

  private String name;  

  private String defaultValue;

  PropertyEnum(String name) { = name;

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

  public String getName() {
    return name;

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

  public String getDefaultValue() {
    return defaultValue;


What is an example of invoking a method of the constant using reflection?

Best Solution

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 " +