Einfach: Sie können nicht außerhalb der Klasse (na ja, nicht in einer vernünftigen Art und Weise).
B ist eine local Klasse - sie existiert nur im Rahmen dieser Methode m1()
. Daher können Sie nur innerhalb dieser Methode instanziieren. Also, innerhalb m1(), können Sie eine einfache B b = new B()
machen und dann b.m2()
aufrufen. Aber außerhalb dieser Methode gibt es keine Syntax, die Ihnen erlauben würde, zu A.m1().B.m2()
zu gelangen.
Nun, Sie können es auch außerhalb dieser Methode unter Verwendung der Reflexion instanziieren. Sie sehen, der verstümmelte Name der Klasse ist A $ 1B.class.
Daher könnten Sie Class.forName("A$1B")
verwenden, um die entsprechende Klasse zu erhalten; Wenn Sie dann eine Instanz der Klasse A haben, können Sie die Reflektion erneut verwenden, um ein Objekt dieser lokalen Klasse zu instanziieren. Und an dieser Stelle könnten Sie dann m2() aufrufen - wiederum mit Reflektion.
Aber: Sie sollten nicht einmal versuchen, das zu tun. Wenn diese Klasse B und ihre Methode m2() von anderen Stellen aufgerufen werden müssen, dann machen Sie es einfach nicht zu einer lokalen Klasse. Machen Sie es zu einer inneren Klasse oder sogar zu einer (vielleicht nicht öffentlichen) Top-Level-Klasse.
wo möchten Sie darauf zugreifen? –
Am Ende, eine nette Frage. Ich habe es im Vorfeld total falsch verstanden - da ich selbst von * lokalen * Klassen nicht wusste - obwohl sie mit java8 hinzugefügt wurden. Also, meine Stimme für eine Frage, die mir heute etwas zu lernen gab. Und Entschuldigung für die Zigionen von Updates, die ich zu meiner Antwort machen musste. – GhostCat