Instanciation de classes internes via Reflection en Java
Lorsqu'ils tentent d'instancier une classe interne, les développeurs peuvent rencontrer l'InstanciationException. Cette exception se produit lorsqu'un paramètre "caché" supplémentaire n'est pas pris en compte. Ce paramètre est l'instance de la classe encasing et doit être fourni lors de l'utilisation de Class.getDeclaredConstructor(). De plus, si la classe imbriquée ne nécessite pas l'instance encapsulante, elle peut être déclarée comme une classe statique imbriquée.
Solution :
Pour instancier une classe interne à l'aide de la réflexion :
Obtenir l'objet de classe de la classe encasing :
<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
Créer une instance de la classe encasing :
<code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
Obtenez l'objet de classe de la classe interne :
<code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
Utilisez Class.getDeclaredConstructor() pour obtenir le constructeur de la classe interne et fournissez la classe englobante comme argument :
<code class="java">Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);</code>
Créez une instance de la classe interne en appelant le constructeur et en passant l'instance englobante comme argument :
<code class="java">Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Solution alternative :
Si la classe interne ne nécessite pas l'instance encapsulante, envisagez de la déclarer comme classe statique imbriquée :
<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!