Maison >Java >javaDidacticiel >Comment instancier des classes internes à l'aide de Reflection en Java ?

Comment instancier des classes internes à l'aide de Reflection en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 22:27:30286parcourir

How to Instantiate Inner Classes using Reflection in Java?

Instanciation de classes internes avec réflexion en Java

Problème :

Tentative d'instancier une classe interne classe utilisant la réflexion, telle que :

<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();</code>

résulte en une InstantiationException.

Réponse :

Lors de l'instanciation d'une classe interne, elle nécessite une instance de la classe englobante. Pour y parvenir, utilisez Class.getDeclaredConstructor() pour obtenir le constructeur et fournissez une instance de la classe englobante comme argument.

Exemple :

<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");
Object enclosingInstance = enclosingClass.newInstance();

Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");
Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);

Object innerInstance = ctor.newInstance(enclosingInstance);</code>

Solution alternative :

Si la classe interne ne nécessite pas d'accès à l'instance englobante, envisagez d'utiliser une classe imbriquée statique à la place :

<code class="java">public class Mother {
    public static class Child {
        public void doStuff() {
            // ...
        }
    }
}</code>

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