La création d'instances de classes internes à l'aide de la réflexion en Java peut souvent conduire à des exceptions similaires à celle rencontrée ici. Comprendre les nuances de l'instanciation de classe interne par la réflexion est crucial pour résoudre ce problème.
Lorsque vous tentez d'instancier une classe interne directement via Class.forName(...) et newInstance(), l'InstantiationException sous-jacente se produit parce que l'instance interne les classes ont un paramètre "caché" supplémentaire - l'instance de la classe englobante.
Pour remédier à cela, utilisez l'approche suivante :
Par exemple :
<code class="java">// Exception handling omitted 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 interne ne nécessite pas d'accès à la classe englobante, envisagez plutôt de la déclarer comme une classe statique imbriquée, comme illustré ici :
<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!