Maison >Java >javaDidacticiel >Comment puis-je accéder à la classe externe à partir d'une classe interne en Java ?

Comment puis-je accéder à la classe externe à partir d'une classe interne en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 11:17:11698parcourir

How Can I Access the Outer Class from an Inner Class in Java?

Référencement de la classe externe à partir de la classe interne

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.

Utilisation d'OuterClass.this

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.

Accès au niveau du package (non recommandé)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn