package javacodebook.misc.ref_use;

import java.lang.reflect.*;

/**
 * Instantiierung eines Objektes und Benutzung der Methoden mithilfe von
 * Reflection demonstrieren.
 * @author  Mark Donnermeyer
 */
public class ClassUse {
    
    public static void main(String[] args) throws Exception {

        // Die Klasse StringBuffer
        Class clazz = Class.forName("java.lang.StringBuffer");
        
        // Die Parameter mitsamt ihrem Inhalt für den Konstruktor
        // der Klasse StringBuffer definieren.
        Class consTypes[] = {
            Class.forName("java.lang.String")
        };
        
        Object consData[] = {
            "Donauschiff"
        };
        
        // Parameter und deren Inhalt für die Methode "insert"
        // definieren.
        Class methTypes[] = {
            Integer.TYPE,
            String.class
        };
        
        Object methData[] = {
            new Integer(5),
            "dampf"
        };
        
        // Den Konstruktor und die Methode "insert" holen.
        Constructor constructor = clazz.getConstructor(consTypes);
        Method method = clazz.getMethod("insert", methTypes);

        // Jetzt das Objekt erzeugen und die Methode ausführen
        Object clazzObj = constructor.newInstance(consData);
        method.invoke(clazzObj, methData);
        
        // Das Resultat ausgeben
        System.out.println("Resultat: " + clazzObj.toString());
    }
}
