Reflection

Reflection ist die Fähigkeit von Java, zur Laufzeit Klassen, Felder und Methoden zu inspizieren und zu nutzen — ohne den Code beim Kompilieren zu kennen.

Basis für Dependency Injection, Hibernate und alle Annotations-getriebenen Frameworks.

I. Beispiel


Class<?> clazz = Class.forName("de.levi.learning.Greeting");
Object obj = clazz.getDeclaredConstructor().newInstance();   // no-arg ctor!
Field f = clazz.getDeclaredField("message");
f.setAccessible(true);
f.set(obj, "Hallo");

II. Wer nutzt es?


Warning

Deshalb: @Entity braucht public no-arg Konstruktor, sonst kann Hibernate keine Instanz erzeugen.

III. .NET-Pendant


System.Reflection (Type.GetType, PropertyInfo, ...).