Instanciation de classes internes avec Java Reflection
En Java, tenter d'instancier une classe interne à l'aide de la réflexion sans fournir d'instance de la classe englobante entraîne une InstanciationException. Cela se produit car les classes internes ont une dépendance cachée sur leur instance de classe englobante.
Solution :
Pour résoudre ce problème, récupérez le constructeur de la classe interne à l'aide de Class. getDeclaredConstructor et transmettez une instance de la classe englobante comme argument lors de son instanciation.
Exemple :
<code class="java">// Assuming "com.mycompany.Mother" is the enclosing class // and "com.mycompany.Mother$Child" is the inner class // Get the enclosing class Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); // Instantiate the enclosing class Object enclosingInstance = enclosingClass.newInstance(); // Get the inner class Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); // Get the constructor with the enclosing class as a parameter Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); // Instantiate the inner class Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Approche alternative :
Si la classe interne ne nécessite pas d'accès à une instance de classe englobante, elle peut être définie comme une classe imbriquée statique. Cela élimine la dépendance à l'égard de la classe englobante.
Exemple de classe imbriquée statique :
<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!