Was ist Reflection und wofür verwendet man das?

Mit Reflection kann zur Laufzeit auf Informationen über Klassen und Objekte zugegriffen werden. Beispielsweise kann ermittelt werden, welche Methoden und Variablen es in einer Klasse gibt. Außerdem ist es möglich, mit Reflection Objekte von Klassen zu erzeugen, die zur Übersetzungszeit noch nicht bekannt sind.

Somit ist Reflection ein geeignetes Mittel für die Umsetzung von Plugin-Konzepten oder grafischen GUI-Editoren.

Im folgenden Beispiel wird gezeigt, wie mittels Reflection aus einem Objekt der Klasse A die Namen und Werte aller Felder ausgelesen werden können.

class A {
    int n = 123;
    String s = "hello";
}
import java.lang.reflect.Field;

public class Reflection_Demo {
    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        A a = new A();
        Field f[] = a.getClass().getDeclaredFields();
        for (Field fi : f) {
            String name = fi.getName();
            Object value = fi.get(a);
            System.out.println(name + " = " + value);
        }
    }
}