Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


4.16.2

Aufruf von Methoden


Der Aufruf von Methoden erfolgt im Prinzip analog zu Konstruktoren. Die zugehörige Reflection-Klasse Method verfügt über eine Methode invoke(), mit der ein Aufruf abgesetzt werden kann. Auch für Methodenaufrufe werden die Parameterwerte auf die zuvor beschriebene Weise als Object-Array übergeben. Zusätzlich muss bei Methoden aber noch eine Referenz auf das Exemplar angegeben werden, auf dem die Methode ausgeführt werden soll. Bei statischen Methoden kann hier null übergeben werden, da diese nicht im Kontext eines bestimmten Exemplars ausgeführt werden.

Nach erfolgreicher Ausführung der Methode liefert invoke() das Ergebnis der Methode zurück. Bei Methoden, die einen einfachen Datentyp als Ergebnistyp haben (z. B. int oder boolean) wird ein Exemplar der entsprechenden Wrapper-Klasse zurückgegeben. Für Methoden mit Ergebnistyp void wird ein Exemplar von Void zurückgeliefert.

Das folgende Beispiel zeigt eine generische Methode zum Setzen von Datenelementen. Diese Methode setzt lediglich das im einleitenden Abschnitt beschriebene Muster für Bean-Properties voraus, d. h., zu einem Datenelement muss es eine get()- und eine set()-Methode geben. Die hier gezeigte Klasse DemoBean genügt dieser Konvention:
  public class DemoBean {
    int state;
  
    public int getState() {
      return state;
    }
  
    public void setState(int state) {
      this.state = state;
    }
  
  }
Derartige Properties können mit der nachfolgend gezeigten Methode gesetzt werden. Ihr müssen drei Parameter übergeben werden: Der Name der Property, der Wert, der zugewiesen werden soll und schließlich das Objekt, bei dem die Property gesetzt werden soll.
  public static void setProperty(String name, Object val,
                Object instance) throws NoSuchMethodException,
                IllegalAccessException, InvocationTargetException {
    Method getMethod, setMethod;
    Class beanClass, propertyType;

    // Class-Object ermitteln
    beanClass = instance.getClass();
    // Das Method-Objekt für die get()-Methode abrufen...
    getMethod = beanClass.getMethod("get"+name, null);
    // ...um dann den Typ der Property ermitteln
    propertyType = getMethod.getReturnType();

    // Anhand des Typs und des Namens die set-Methode ermitteln...
    setMethod = beanClass.getMethod("set"+name, new Class[] {propertyType});
    // ... und den Aufruf absetzen
    setMethod.invoke(instance, new Object[] {val});
  }

Die folgenden Anweisungen zeigen schließlich, wie die generische setProperty()-Methode auf die zuvor gezeigte Bean-Klasse angewendet wird:
  DemoBean bean = new DemoBean();
  PropVal.setProperty("State", new Integer(100), bean);

Material zum Beispiel


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.