Reflection: Methode ohne Parameter (getter)

Vatar

Erfahrenes Mitglied
Hi

Es handelt sich nicht wirklich um ein Problem, aber ich habe nun einmal ungern Warnungen in meinem Code. Ich rufe über Reflection eine getter-Methode
Java:
return element.getClass().getMethod("get" + property, null).invoke(element, null);
aber die null-Argumente mag er irgendwie nicht..ich soll da immer irgendwas casten?

Wie macht man das denn richtig?
Danke
 
Hallo,

du könntest es so machen
Code:
return element.getClass().getMethod("get" + property, (Class[])null).invoke(element, (Object[])null);

Dann kommt keine Warnung mehr.


MFG
zEriX
 
Hallo,

Steht dein Compiler auf dem Java 5 Source Kompatibilität?
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 */
public class ReflectionExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    Bubu bubu = new Bubu("Bubu", 24);
    System.out.println(Bubu.class.getDeclaredMethod("getData").invoke(bubu));
    System.out.println(Bubu.class.getDeclaredMethod("getValue").invoke(bubu));
  }

  static class Bubu {
    String data;
    int value;


    /**
     * @param data
     * @param value
     */
    public Bubu(String data, int value) {
      super();
      this.data = data;
      this.value = value;
    }


    public String getData() {
      return data;
    }


    public void setData(String data) {
      this.data = data;
    }


    public int getValue() {
      return value;
    }


    public void setValue(int value) {
      this.value = value;
    }
  }
}

Gruß Tom
 
Danke euch beiden

Compiler ist auf 6 gestellt.
Ich habe nur gerade festgestellt dass ich bei diesen Methoden (getDeclaredMethod, invoke) auch nur einen Parameter angeben kann obwohl ich in der Auswahlbox in Eclipse jeweils noch einen zweiten angeben müsste (parameterTypes und Object[]). Dann sind auch die Warnungen weg aber ich verstehe nicht ganz wieso ich die weglassen kann!
 
Das funktioniert durch varargs, d. h. du kannst soviele Übergabeparameter haben wie du willst.

Code:
public void methode(String msg, Object... varargs){}

Beispielsweise bei dieser Methode müsstest du mindestens einen String übergeben, mehr nicht. Du kannst aber noch alles mögliche übergeben, egal ob String, Integer oder sowas. Alles was nach dem String übergeben wird, wird als hier als Object[] angesehen. Das ganze kannst du natürlich mit jeder Klasse machen.

Schau mal hier
http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html


MFG

zEriX
 
Zurück