Motivation
Was ist das Problem?
- Das statische Typmodell von Java erfordert, dass Klassen bereits zur Compilezeit bekannt sind
- Das dynamische Runtime-Modell von Java lädt und bindet Klassen aber erst zur Laufzeit
- Wie kann man …
- mehr Dynamik in die Programmierung bekommen?
- erst zur Laufzeit entscheiden, welche Klasse ein API implementieren soll?
- dynamisch Typen auf ihre Eigenschaften hin untersuchen, z. B. für Entwicklungsumgebungen?
- Test-Tools schreiben, die beliebigen Code testen können ohne jedes Mal neu compiliert werden zu müssen?
- API und Implementierung strikt trennen?
Reflection in Java
- Reflection bezeichnet die Fähigkeit eines Computerprogramms während der Laufzeit sein eigenes Verhalten und seine Strukturen zu beobachten und zu verändern
- Reflection zählt zur Metaprogrammierung
- In Java stellt das Reflection-API den Programmierer:innen die Möglichkeit der Reflection zur Verfügung
- geladene Klassen untersuchen
- beliebige Klassen laden
- Objekte erzeugen
- Methoden aufrufen
- Felder Manipulieren
- …
Nachteile von Reflection in Java
Java-Code der per Reflection arbeitet ist
- teilweise langsamer
- schwerer zu verstehen
- mit Sicherheitsbeschränkungen belegt
- nicht zur Compile-Zeit überprüfbar
- fehleranfälliger
- komplex