Dans l'extrait de code fourni, vous avez des classes imbriquées OuterClass et InnerClass. Votre objectif est d'accéder à la classe parent (OuterClass) à partir d'une instance de la classe interne (InnerClass) sans modifier le code de la classe interne.
Dans InnerClass, vous pouvez utiliser l'expression OuterClass.this pour faire référence à l'instance englobante d'OuterClass. Cette expression qualifie le mot-clé this pour indiquer l'instance englobante. Voici une version modifiée de votre code :
public class OuterClass { public class InnerClass { private String name = "Peakit"; public OuterClass outer() { return OuterClass.this; } } public static void main(String[] args) { OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); OuterClass anotherOuter = inner.outer(); if(anotherOuter == outer) { System.out.println("Was able to reach out to the outer object via inner !!"); } else { System.out.println("No luck :-( "); } } }
Lorsque vous exécutez ce code, la méthode external() dans InnerClass renvoie l'instance englobante d'OuterClass, que vous pouvez ensuite comparer avec l'instance OuterClass d'origine.
Grâce à des expérimentations, il a été constaté que le champ contenant la référence à la classe externe a accès au niveau du package. Cela signifie que vous pouvez techniquement accéder à la classe externe par réflexion :
Field field = InnerClass.class.getDeclaredField("this"); field.setAccessible(true); OuterClass outer = (OuterClass) field.get(inner);
Remarque : Cette approche est déconseillée par la spécification du langage Java et peut ne pas être fiable dans différentes versions de Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!