Was versteht man unter Introspektion und wie funktioniert sie? v.1.5
Im Beispiel werden zwei Klassen deklariert, die Klasse Introspection
,
die die eigentliche Laufzeitklasse ist und die Klasse Auto
.
Sie dient lediglich als Demonstrationsobjekt und soll
hinsichtlich der in ihr enthaltenen Felder und Methoden
untersucht werden.
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Introspection {
public void schauNach() {
Class<Auto> a = Auto.class;
Method[] meths = a.getMethods();
for (Method m : meths) {
System.out.println("Methodenname: " + m.getName());
Class<?>[] params = m.getParameterTypes();
for (int i = 0; i < params.length; i++)
System.out.println("Parametertyp: " + params[i]);
System.out.println();
}
Field[] fields = a.getDeclaredFields();
for (Field f : fields) {
System.out.println("Feldname: " + f.getName());
}
}
public static void main(String[] args) {
Introspection in = new Introspection();
in.schauNach();
}
}
class Auto {
int tempo;
int radZahl;
public Auto(int tempo, int radZahl) {
this.tempo = tempo;
this.radZahl = radZahl;
}
public void beschleunige(int menge) {
tempo += menge;
}
public void verzoegere() {
tempo--;
if (tempo < 0)
tempo = 0;
}
}
Die Untersuchung der Klasse Auto
findet in der
Methode public void schauNach()
statt. Hier wird
zunächst ein Class-Objekt der Klasse Auto
erzeugt. Die Methode Class.getMethods()
liefert ein
Array vom Typ Method[]
, das in der Folge in einer
for-Schleife durchlaufen wird. In dieser wird als erstes der
Klassenname ausgegeben. Danach folgen in weiteren Schleifen die
Ausgaben der Methodennamen und -parameter, sowie der Feldnamen.
Sie werden ebenfalls jeweils zunächst in Arrays abgelegt.
Es ist wichtig zu wissen, dass die Ausgaben sich auch auf die
Superklasse(n) beziehen. Da die Klasse Auto
keine
explizite Superklasse besitzt, erbt sie von java.lang.Object
.
Deren Methoden panund Felder werden bei der Ausgabe entsprechend
berücksichtigt.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.