Maison > Java > javaDidacticiel > le corps du texte

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

DDD
Libérer: 2024-10-27 03:03:30
original
236 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal