Maison >Java >javaDidacticiel >Comment instancier des classes internes à l'aide de Reflection en Java ?
Instanciation de classes internes avec réflexion en Java
Problème :
Tentative d'instancier une classe interne classe utilisant la réflexion, telle que :
<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance();</code>
résulte en une InstantiationException.
Réponse :
Lors de l'instanciation d'une classe interne, elle nécessite une instance de la classe englobante. Pour y parvenir, utilisez Class.getDeclaredConstructor() pour obtenir le constructeur et fournissez une instance de la classe englobante comme argument.
Exemple :
<code class="java">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>
Solution alternative :
Si la classe interne ne nécessite pas d'accès à l'instance englobante, envisagez d'utiliser une classe imbriquée statique à la place :
<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!