C'est simple : vous ne pouvez pas le faire en dehors de la classe (enfin, pas d'une manière raisonnable).
B est un local elle n'existe que dans le cadre de cette méthode. m1()
. Vous pouvez donc sólo l'instancier dans cette méthode. Ainsi, dans m1(), vous pouvez faire un simple B b = new B()
et ensuite invoquer b.m2()
. Mais en dehors de cette méthode, il n'y a pas syntaxe qui vous permettrait d'accéder A.m1().B.m2()
.
Eh bien, vous pouvez aussi l'instancier à l'extérieur de de cette méthode en utilisant la réflexion. Vous voyez, le mutilé Le nom de la classe est A$1B.class.
Vous pouvez donc utiliser Class.forName("A$1B")
pour obtenir la classe correspondante ; et lorsque vous avez alors une instance de la classe A, vous pouvez à nouveau utiliser la réflexion pour instancier un objet de cette classe locale. Et sur cette instance, vous pouvez alors appeler m2() - toujours en utilisant la réflexion.
Mais : vous ne devriez même pas essayez pour faire ça. Si la classe B et sa méthode m2() doivent être appelées à partir d'autres endroits, il suffit de ne pas en faire un élément de la classe. local classe. Faites-en une classe interne, ou même une classe de premier niveau (peut-être non publique).