Reflection oder wie****?

condor99

Grünschnabel
Hallo,
Java:
wer kann mir bei folgendem Problem helfen?
class A {
   public void addComponent(Component component) {
      // KlassenName des Aufrufers ermitteln
      StackTraceElement ste = new Exception().getStackTrace()[1];
      Class clazz = Class.forName(ste.getClassName());
      for(Field feld : clazz.getDeclaredFields() ) {
           // Name (Feldname) der der Componente ermittel ****?
           /*  hier komme ich nicht weiter, Ziel soll es sein die Namen
            *  'lblAnzeige'  und 'txtBlaBla' zu ermitteln */
      }
   }
}

class B {
   private JLabel lblAnzeige;
   private JTextField txtBlaBla;
   public B() {
      A a = new A();
      a.addComponent(lblAnzeige);
      a.addComponent(txtBlaBla);
}
Danke!
 
Zuletzt bearbeitet:
Hi

Du brauchst zuerst eine Classinstanz aus dem String-Namen: Class.forName
Von dieser kannst du mit getDeclaredFields alle Variablen (als Field-Array) abrufen.

Dann alle durchgehen und prüfen, ob das Objekt .get() selbst ==component ist.
Wenn man das passende FIeld gefunden hat: getName().

Bitte Codetags verwenden (siehe Signatur; diesmal schon eingefügt).

Gruß
 
soweit war ich auch schon :-( aber ich verstehe leider nicht was du mit "Objekt .get() selbst ==component" meinst. die Funktion getDeclaredFields liefert doch ein Array von Field's und da gibt es keine Funktion 'get()' oder?
 
Aber die einzelnen Felder haben ein get()
Java:
if( f[i].get() == component )
Und das in einer Schleife für alle f[...]

edit: Du "warst" schon so weit, hast es aber erst nach meinem Post reineditiert. Aha.
 
Hm, man braucht ja das Objekt.
Weiß nicht, ob das so überhaupt möglich ist (ohne einen weiteren Parameter in addComponent).
 
Ich weiß zwar nicht, was der Sinn der Sache sein soll, aber wenn du die Felder 'lblAnzeige' und 'txtBlaBla' haben willst, dann musst du schon die Felder von B abklappern. Also irgendwie muss da schon die Instanz mit übergeben werden.

EDIT:
Ich habe mal in die Schleife eine Ausgabe für die Feldnamen eingefügt und wenn ich das Programm so ausführe, dann bekomm ich die beiden gesuchten Feldnamen auch ausgegeben.
 
Zuletzt bearbeitet:
Abfragen der Namen ist ja nicht das Problem, aber was equals Component ist?
Ohne Objekt wirds nicht gehen.
 
Na das, was bei get übergeben werden muss.
Und eben das in der anderen Klasse zu bekommen scheint nicht möglich zu sein.

Lösung beim Aufruf der Methode this übergeben.
 

Neue Beiträge

Zurück