Reflection mit lokalen Variablen

DealeyLama

Mitglied
Hallo,

nach längerer Zeit mal wieder eine dumme Frage:

Ist es möglich per Reflection-API auch auf lokal deklarierte Variablen zuzugreifen?

Vielen Dank...

Alexander Schell
 
Moin!
Mir fallen dazu 2 Möglichkeiten an, je nachdem was du vorhast...
Entweder JPDA, also die Debugger Architiceture nutzen. Du kannst natürlich auch nur dann darauf zugreifen, wenn die lokale Variable auch existiert..
Oder BCEL http://jakarta.apache.org/bcel/ , welches dir eine Analyse und Manipulation der Klassen erlaubt...

Hoffe, das hilft weiter..

*grüssle*
MeinerEiner
 
Hi,

also meiner Meinung nach geht das ganze mit der ganz normalen Reflection API. Wird unter JEE, z.B. zur dependency injection benutzt.

Sollte in etwa so funktionieren:
Java:
public class ReflectionTest {

    private int accessMe;
    
    public ReflectionTest(){
        accessMe = 0;
    }
    
    public int getAccessMe(){
        return accessMe;
    }

    public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        ReflectionTest testClass = new ReflectionTest();
        
        System.out.println("Wert vor Injection: " + testClass.getAccessMe());

        //Classe holen
        Class reflectionClass = testClass.getClass();
        //Feld holen
        //Alternativ alle felder per getDeclaredFields
        Field reflectionField = reflectionClass.getDeclaredField("accessMe");
        
        //sorgt dafür, dass das von außen ansprechbar ist.
        reflectionField.setAccessible(true);
        //setze für die instanz testClass den Wert des feldes: 
        reflectionField.set(testClass, 1);
        
        System.out.println("Wert nach Injection: " + testClass.getAccessMe());

    }

}
Je nachdem wofür du das brauchst, solltest du dir aber evt. überlegen, ob du nicht besser das Design anpasst.

Gruß
Daniel
 
Hallo,

erstmal vielen dank für eure Antworten...

@laocoon: Ich hab' mich vielleicht ungeschickt ausgedrückt...ich meinte tatsächlich lokal deklarierte Variablen...keine Member-Variablen, wie du eine in Deinem Beispiel benutzt hast...vielen Dank trotzdem...

tja...dann werde ich das wohl mal über JPDA versuchen; vielleicht bekomme ich es ja hin...danke für den tipp...

Schönen Abend noch

Alexander Schell
 
Also du meinst eine Variable, die innerhalb einer Methode deklariert wurde? Dann hab ich das wirklich falsch verstanden.
Da ist fürchte ich mit Reflection nicht viel zu machen. Zumindest wüsste ich gerade nicht wie.
Allerdings interessiert mich nu schon, wozu du das brauchst :)

Grüße
Daniel
 
Hallo,

ich wollte mir einen Error-Tracker bauen. Testen ist zwar gut und schön, und wird hoffentlich auch richtig gemacht, kann aber nicht mit letzter Sicherheit die Abwesenheit von Fehlern garantieren.

Und deswegen wollte ich ein kleines Werkzeug bauen, das mir per WebService mitteilt, an welcher Stelle ein Programm stürzt. Mit Informationen über den Stack, der Exception, Feldern, lokaler Variablen und so weiter und so fort...

Ich schätze, daß ich mich verschätzt habe, und dieses Werkzeug aufwendiger zu bauen sein wird, als ich gedacht habe... :)

MfG

Alexander Schell
 
Zurück