package javacodebook.misc.ref_info;

import java.lang.reflect.*;

/**
 * Informationen über eine Klasse auslesen
 * @author  Mark Donnermeyer
 */
public class ClassInfo {
    
    public static void main(String []args) throws ClassNotFoundException {
        if (args.length < 1)
            printUsage();
        
        // Anhand der Namens der Klasse wird ein Objekt der Klasse "Class"
        // erzeugt. Das geht für jede Java-Klasse
        Class clazz = Class.forName(args[0]);
        
        // Die implementierten Interfaces sowie Konstruktoren,
        // Methoden und Felder der Klasse werden aufgelistet.
        System.out.println("-- Interfaces --");
        Class[] interfaces = clazz.getInterfaces();
        showList(interfaces);
        System.out.println("-- Konstruktoren --");
        Constructor[] constructors = clazz.getConstructors();
        showList(constructors);
        System.out.println("-- Methoden --");
        Method[] methods = clazz.getMethods();
        showList(methods);
        System.out.println("-- Felder --");
        Field[] fields = clazz.getFields();
        showList(fields);
    }
    
    private static void showList(Object []list) {
        for (int i=0; i<list.length; i++)
            System.out.println(list[i].toString());
    }
    
    private static void printUsage() {
        System.out.println("Aufruf: java javacodebook.misc.ref_info.ClassInfo <class>");
        System.exit(0);
    }
}
