Enum metadata exposes the constants declared by an enum type.

enum constants getEnumConstants returns the enum values in declaration order.
ordinal An enum ordinal is its zero-based position in the declaration.

Enum Reflection

index
EnumReflection.java
Replay: real traced execution (multi-file project)
public class EnumReflection {
    enum Status {
        READY,
        RUNNING,
        DONE
    }

    public static void main(String[] args) {
        int index = 0;
        Status[] values = Status.class.getEnumConstants();
        Status status = values[index];

        System.out.println("name=" + status.name());
        System.out.println("ordinal=" + status.ordinal());
    }
}
public class EnumReflection {
    enum Status {
        READY,
        RUNNING,
        DONE
    }

    public static void main(String[] args) {
        int index = 1;
        Status[] values = Status.class.getEnumConstants();
        Status status = values[index];

        System.out.println("name=" + status.name());
        System.out.println("ordinal=" + status.ordinal());
    }
}
public class EnumReflection {
    enum Status {
        READY,
        RUNNING,
        DONE
    }

    public static void main(String[] args) {
        int index = 2;
        Status[] values = Status.class.getEnumConstants();
        Status status = values[index];

        System.out.println("name=" + status.name());
        System.out.println("ordinal=" + status.ordinal());
    }
}
  1. index ← 0, status ← READY

    8public static void main(String[] args) {9    int index→ 0 = 0;  //@index=1, 210    Status[] values = Status.class.getEnumConstants();11    Status status→ READY = values[index]READY;1213    System.out.println("name=" + status.name());14    System.out.println("ordinal=" + status.ordinal());15}
    outputname=READY
    ordinal=0
  1. index ← 1, status ← RUNNING

    8public static void main(String[] args) {9    int index→ 1 = 1;10    Status[] values = Status.class.getEnumConstants();11    Status status→ RUNNING = values[index]RUNNING;1213    System.out.println("name=" + status.name());14    System.out.println("ordinal=" + status.ordinal());15}
    outputname=RUNNING
    ordinal=1
  1. index ← 2, status ← DONE

    8public static void main(String[] args) {9    int index→ 2 = 2;10    Status[] values = Status.class.getEnumConstants();11    Status status→ DONE = values[index]DONE;1213    System.out.println("name=" + status.name());14    System.out.println("ordinal=" + status.ordinal());15}
    outputname=DONE
    ordinal=2