Per Reflection auf (method) local inner class zugreifen?

Novanic

Bekanntes Mitglied
Hi,

ich schreibe gerade einen Code-Parser mittels JDT/AST und bin dabei über ein Konstrukt gestolpert, dass sich wohl "local inner class" nennt. Damit ist eine deklarierte Klasse innerhalb einer Methode gemeint.

Hat jemand eine Idee wie man darauf per Reflection zugreifen kann, sodass man sich davon ein Class-Objekt holen kann? In der Theorie sollte das möglich sein, weil es ja eigentlich nichts anderes als eine anonyme Klasse ist (darauf kann man mit Class.forName("Klasse$1")) zugreifen. Bisher konnte ich zu dem Konstrukt aber kaum Informationen finden.

Hier ein Code-Beispiel:

Code:
public class Klasse
{
  public void method() {
    class LocalInnerKlasse {

    }
  }
}

Danke schonmal. 🙂

Gruß Nova
 
ich muss sagen : ich bin erstmal überrascht das das SO überhaupt compiled

gucke ich mir allerdings das ergebnis an : Klasse$1LocalInnerKlasse wird es schon merkwürdig
jage ich es dann noch durch einen de-compiler kommt ne normale neste class bei raus

Code:
public class Klasse
{

    public Klasse()
    {
    }

    public void method()
    {
    }

    // Unreferenced inner class Klasse$1LocalInnerKlasse
    class _cls1LocalInnerKlasse
    {

        final Klasse this$0;

            _cls1LocalInnerKlasse()
            {
                this$0 = Klasse.this;
                super();
            }
    }

}

wobei ich hier eher davon ausgehen würde das mein de-compiler JAD1.5.8g damit nicht umgehen kann


zum anderen : WOFÜR ?
ich kann mir jetzt erlich keinen anwendungsfall einfallen lassen in dem es sinn machen würde eine innere nested class nur innerhalb einer methode zu erzeugen
 
Hi,

danke, mit dem Klassennamen hinter der anonymen Klasse funktioniert es. 🙂 Also bei dem Beispiel mit Class.forName("Klasse$1LocalInnerKlasse").

Ich war auch überrascht, dass das möglich ist und ich habe auch fast 10 Jahre Java-Erfahrung. ;-)

Ich bin da vor kurzem drüber gestolpert als ich mit meinem Code-Parser ein anderes Projekt analysiert hatte. Man kann daraus auch problemlos eine normale innere Klasse machen. Mir fällt zu dem Konstrukt nur ein sinnvoller Anwendungsfall ein: Man kann die Sichtbarkeit einer Klasse damit auf eine Methode reduzieren. Wenn man darüber aber mal kurz nachdenkt, macht das eigentlich auch wenig Sinn, weil man dann vermutlich vorher schon etwas falsch gemacht hat. Die Klasse oder Methode ist vermutlich einfach zu groß/lang, wenn man wirklich das Bedürfnis hat die Sichtbarkeit einer Klasse auf eine Methode zu reduzieren. Die Unterteilung der Klasse in mehrere Klassen wäre wohl sinnvoller. 🙂

Danke für die schnelle Antwort.

Gruß Nova
 
Zuletzt bearbeitet:
naja ... wozu bitte den scope einer klasse auf eine methode beschränken ? um WAS damit zu machen ? daten zu halten ? was zu berechnen ? wofür ... am ende der methode muss man die daten eh rausholen und zumindest das objekt wenn nicht die ganze klasse sind dann ungültig ... dann kann man den code auch einfach so direkt in die methode schreiben



meiner meinung nach eher n bug und sollte eigentlich zu nem compiler-fehler führen ... naja ... wer weis warum das überhaupt so compiled ... und warum mein de-compiler so einen murks draus macht
 

Neue Themen


Zurück
Oben