Java Reference
In-Depth Information
2
Refl ection
Mit Hilfe von Refl ection kann man zur Laufzeit unterschiedliche Informationen über eine
Klasse erfragen: Welche Attribute hat eine Klasse? Wie heißen ihre Attribute, welchen Typ
und welche Sichtbarkeit haben sie? Welche Konstruktoren (Parametertypen, Ausnahmen,
Sichtbarkeit) hat eine Klasse? Welche Methoden (Namen, Parametertypen, Rückgabetyp,
Ausnahmen, Sichtbarkeit) hat eine Klasse? Welche Schnittstellen implementiert eine Klasse
und von welcher Klasse ist sie abgeleitet? Dies ist für jede beliebige Klasse möglich, ohne
dass man die betreff ende Klasse beim Schreiben seines Codes schon kennen muss. Auch
muss der Quellcode der zu untersuchenden Klasse zur Laufzeit nicht vorhanden sein; was
man zur Laufzeit braucht, ist die entsprechende Class-Datei, die sich auch in einem Jar-
Archiv befi nden kann. Der Name der Klasse muss im Programm nicht „fest eingebrannt“
sein („fest eingebrannt“ ist beispielsweise die Klasse X, wenn man in seinem Programm
new X() benutzt; der Klassenname kann nach dem Übersetzen des Programms zur Lauf-
zeit nicht mehr dynamisch geändert werden). Es ist im Gegenteil möglich, dass man den
Namen der zu untersuchenden Klasse dynamisch als String, z. B. aus einer Konfi gurations-
datei oder von der Tastatur, einliest und damit die oben beschriebenen Informationen erfra-
gen und anzeigen kann.
Mit Hilfe von Refl ection kann man aber nicht nur Informationen auslesen, sondern man
kann damit auch die Attribute eines Objekts einer Klasse ändern, ohne dass man beim
Programmieren schon weiß , welche Attribute die Klasse hat. Ferner kann man in seinem
Programm Objekte einer Klasse erzeugen, ohne dass man beim Programmieren weiß , wie
die Klasse heißt und welche Parametertypen der Konstruktor benötigt. Entsprechendes gilt
für das Aufrufen von Methoden.
Im Zusammenhang mit Java-Komponenten kann ein Komponenten-Framework mit Hilfe
von Refl ection zum Beispiel ein Objekt einer neuen Komponente erzeugen, deren Klasse
beim Schreiben des Komponenten-Framework-Codes noch nicht bekannt war. Dem Kompo-
nenten-Framework muss zur Laufzeit lediglich der Name der Komponentenklasse mitgeteilt
werden, dann kann das Framework Objekte davon erzeugen. Wie Sie im Laufe dieses Kapi-
tels sehen werden, spielen Generics im Zusammenhang mit Refl ection eine gewisse Rolle.
 
Search WWH ::




Custom Search