Maison >Java >javaDidacticiel >Comment instancier des classes internes en Java à l'aide de Reflection et éviter l'exception d'instanciation ?

Comment instancier des classes internes en Java à l'aide de Reflection et éviter l'exception d'instanciation ?

DDD
DDDoriginal
2024-10-26 19:22:031017parcourir

How to Instantiate Inner Classes in Java Using Reflection and Avoid InstantiationException?

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 :

  1. Obtenir l'objet de classe de la classe encasing :

    <code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
  2. Créer une instance de la classe encasing :

    <code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
  3. Obtenez l'objet de classe de la classe interne :

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
  4. 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>
  5. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn