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!