Maison  >  Article  >  Java  >  Comment instancier des classes imbriquées en Java à l’aide de Reflection ?

Comment instancier des classes imbriquées en Java à l’aide de Reflection ?

DDD
DDDoriginal
2024-10-27 03:03:30143parcourir

How to Instantiate Nested Classes in Java Using Reflection?

Instanciation de classes imbriquées en Java via la réflexion

L'incapacité d'instancier la classe interne définie dans le code Java fourni à l'aide des méthodes de réflexion standard est un piège courant auquel sont confrontés les développeurs Java. Lorsque vous tentez de créer une instance directement à l'aide de Class.newInstance(), le problème survient en raison de la présence d'un paramètre caché représentant une instance de la classe englobante.

Pour réussir à instancier une classe interne, il est nécessaire d'employer Class.getDeclaredConstructor() pour accéder au constructeur et fournir une instance de la classe englobante comme argument. L'extrait de code suivant illustre cette approche :

<code class="java">// Exceptions omitted for brevity
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>

Alternativement, si la classe imbriquée ne dépend pas de l'instance englobante, une solution plus simple consiste à la déclarer comme une classe imbriquée statique :

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

En utilisant ces approches, les développeurs peuvent instancier efficacement des classes internes dépendantes et indépendantes à l'aide de la réflexion en 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