Variablenname mittels Reflexions rausbekommen (als String) ?

RySa

Bekanntes Mitglied
Hi 🙂

Ich würd gerne wissen, ob es möglich ist, den Variablennamen irgendwie als String "rauszubekommen" (mittels Reflexions ?) Ich habe schon zig Seiten durchgesucht, und in den meisten wurde gesagt, dass es nicht geht, was mich aber wundert. Kann mir da jemand ein Beispiel geben, bzw mich auf eine entsprechende Seite leiten ? Danke im voraus 🙂
 
Naja, zum Beispiel ganz einfach so etwas:
Java:
String auto1 = "bmw";

Jetzt bräuchte ich, aus der Variable auto1, den Namen, also "auto1" irgendwie als String haben. Ich habe mal gehört, dass es mittels Reflexions gehen sollte, nur weiß nicht wirklich wie. Die meisten sagen, das die JVM eigene "Variablennamen" vergibt, oder sie erst gar nicht behält
 
Moin,

meinst sowas:
Java:
int iMyInteger = 1899;
String sMyString = <Bezeichner von iMyInteger> ...

Das geht IMHO nicht!

Gruß
Klaus
 
Klassen-, Instanz- oder lokale Variablen?

Grundsätzlich ist es so:
Reflection ist nicht für Anfänger gedacht und wird von diesen auch selten richtig verwendet, wenn du selber damit nicht klarkommst und zu 100% weisst was du da machst, ist es das falsche Mittel.

Was willst du denn eigentlich erreichen?
 
Danke für die schnellen Antworten.

Allerdings ist mein Lehrer anderer Meinung hier 🙂 Ist fest davon überzeugt dass es geht. Oder aber er wollte mich nur irgendwie beschäftigen, da ich mich sonst langweile 😛 Ich meine aber auch, dass es doch irgendwie möglich sein muss, an den Variablennamen zu kommen...

EDIT: Das weiß ich auch, und da ich mich nie mit Reflexions beschäftigt habe, will ich das auch nicht produktiv einsetzen, zumindest noch nicht jetzt. Ist halt nur eine Aufgabe, und wollte herausfinden ob es überhaupt möglich ist. Die Rede ist hier von lokalen Variablen. Wie ich an die Klassenvariablen kommen würde, wüsste ich glaub ich sogar. Also nochmal ganz allgemein, ist es möglich an die Namen der lokalen Variablen zu kommen oder nicht ? Und wenn ja, irgendwelche Quellen/Beispiele dafür ?
 
Zuletzt bearbeitet:
Geht natürlich.
Hab mal ein kleines Beispiel dazu geschrieben.

Java:
import java.lang.reflect.Field;

public class ReflectionTest
{
  private String name = "value";
  
  public static void main(String[] args) throws Exception
  {
    ReflectionTest instance = new ReflectionTest();
    
    // holen aller Felder, die in der Klasse deklariert sind (in dem Fall nur eines naemlich name)
    Field[] fields = ReflectionTest.class.getDeclaredFields();
    for (Field field : fields)
    {
      // Zugriff erlauben, da field private ist sonst kommt es zu einer Exception (IllegalAccess)
      field.setAccessible(true);
      
      // holen des wertes des aktuellen Feldes aus der instanz der Klasse
      Object fieldVal = field.get(instance);
      
      // field mit wert "value" gefunden
      if("value".equals(fieldVal))
      {
        // Ausgabe des fieldname ( = Variablenname)
        System.out.println(field.getName());
      }
    }
  }
}

EDIT: Bei lokalen Variablen gehts nicht, dass stimmt.
 
Danke 😛 Ist es sonst irgendwie möglich da dran zu kommen ? Also wie ich an die Namen der Klassenvariablen komme, weiß ich. Was ist denn mit Instanzvariablen ?

EDIT: Ah, da hat schon _Andi91 was dazu geschrieben 🙂 Danke dir auch 🙂
 
Es ist möglich an den Namen der Variable zu kommen. Allerdings nicht mit Reflection. Wenn man den Code mit Debug informationen kompiliert kann man über die debugging Schnittstelle den Namen ermitteln. Ob man das aber wirklich will ist eine andere Frage ;-)

Der Name steht dann in der LocalVariableTable.

"The LocalVariableTable attribute is an optional variable-length attribute of a Code (§4.7.3) attribute. It may be used by debuggers to determine the value of a given local variable during the execution of a method."
 

Zurück
Oben