Maison > Java > javaDidacticiel > le corps du texte

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

DDD
Libérer: 2024-10-26 19:22:03
original
941 Les gens l'ont consulté

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>
    Copier après la connexion
  2. Créer une instance de la classe encasing :

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

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
    Copier après la connexion
  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>
    Copier après la connexion
  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>
    Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!