J'ai le code suivant. Je veux mettre la main sur l'objet de classe externe à l'aide duquel j'ai créé l'objet de classe interne inner
. Comment puis-je le faire?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
EDIT: Eh bien, certains d'entre vous ont suggéré de modifier la classe interne en ajoutant une méthode:
public OuterClass outer() {
return OuterClass.this;
}
Mais que se passe-t-il si je n'ai pas le contrôle pour modifier la classe interne, alors (juste pour confirmer) avons-nous une autre façon d'obtenir l'objet de classe externe correspondant à partir de l'objet de classe interne?
la source
OuterClass.this
fait référence à la classe externe.la source
Vous pouvez (mais vous ne devriez pas) utiliser la réflexion pour le travail:
Bien sûr, le nom de la référence implicite n'est absolument pas fiable, donc comme je l'ai dit, vous ne devriez pas :-)
la source
La réponse plus générale à cette question concerne les variables masquées et la manière dont elles sont accessibles.
Dans l'exemple suivant (d'Oracle), la variable x dans main () est l'observation de Test.x :
L'exécution de ce programme affichera:
Plus d'informations sur: http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6
la source
Voici l'exemple:
la source
si vous n'avez pas le contrôle pour modifier la classe interne, la refection peut vous aider (mais pas à recommander). ce $ 0 est une référence dans la classe Inner qui indique quelle instance de la classe Outer a été utilisée pour créer l'instance actuelle de la classe Inner.
la source
Bien sûr, le nom de la référence implicite n'est pas fiable, vous ne devez donc pas utiliser la réflexion pour le travail.
la source
Ont été modifiés en 2020-06-15
la source