Java Reference
In-Depth Information
benutzt. Durch diese Änderungen ist das Programm nicht aufwändiger geworden. Was das
Programm nun aber doch aufwändiger macht, ist die Darstellung der Informationen eines
Type-Objekts. In Listing 2.3 wird zu diesem Zweck die Methode printType verwendet. Diese
Methode stellt nicht nur dar, um welche Typart (WildcardType, TypeVariable usw.) es sich
handelt, sondern z. B. für einen WildcardType auch die unteren und oberen Grenzen. Da
diese Grenzen wieder durch Type-Objekte beschrieben sind, wird zur Ausgabe dieser Type-
Objekte wieder die Methode printType verwendet. Damit die Darstellung auf dem Bild-
schirm einigermaßen übersichtlich aussieht, wird mit Einrückungen gearbeitet. Der
Methode printType wird deshalb als Argument nicht nur das Type-Objekt übergeben, über
das Informationen ausgegeben werden sollen, sondern auch eine ganze Zahl, welche angibt,
um wie viele Leerzeichen die ausgegebenen Informationen eingerückt sein sollen. Die
Methode printType ist relativ aufwändig, da sie für die unterschiedlichen Arten von Typen
eine Fallunterscheidung durchführt und dann jede einzelne Form eines Typs näher behan-
delt. In Listing 2.3 geben wir wieder nur einen Ausschnitt an; der vollständige Programm-
code kann von der Web-Seite zum Buch heruntergeladen werden.
Listing 2.3
Programm zur Ausgabe der Eigenscha en einer Klasse (mit Generics)
package javacomp.basics;
import java.lang.reflect.*;
public class ReflectorForGenerics
{
public static void main(String[] args)
{
if(args.length == 0)
{
System.out.println("arguments: list of class names");
}
for(String className: args)
{
analyze(className);
System.out.println("============================");
}
}
private static void analyze(String className)
{
try
{
String headline = className + ":";
System.out.println(headline);
printNTimes('-', headline.length());
System.out.println();
Class<?> c = Class.forName(className);
System.out.println(" type parameters: ");
Type typeParams[] = c.getTypeParameters();
for(Type typeParam : typeParams)
{
printType(typeParam, 4);
}