Maison > Java > javaDidacticiel > le corps du texte

Comment pouvez-vous instancier une classe interne à l'aide de Java Reflection sans instance de la classe englobante ?

Susan Sarandon
Libérer: 2024-10-27 00:37:03
original
325 Les gens l'ont consulté

How Can You Instantiate an Inner Class Using Java Reflection Without an Instance of the Enclosing Class?

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

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>
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal