Heim  >  Artikel  >  Java  >  Wie können Sie eine innere Klasse mithilfe von Java Reflection ohne eine Instanz der umschließenden Klasse instanziieren?

Wie können Sie eine innere Klasse mithilfe von Java Reflection ohne eine Instanz der umschließenden Klasse instanziieren?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 00:37:03234Durchsuche

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

Instanziieren innerer Klassen mit Java Reflection

In Java wird der Versuch, eine innere Klasse mithilfe von Reflektion zu instanziieren, ohne eine Instanz der umschließenden Klasse bereitzustellen, dies tun führt zu einer InstantiationException. Dies liegt daran, dass innere Klassen eine versteckte Abhängigkeit von ihrer umschließenden Klasseninstanz haben.

Lösung:

Um dieses Problem zu beheben, rufen Sie den Konstruktor der inneren Klasse mit Class ab. getDeclaredConstructor und übergeben Sie eine Instanz der einschließenden Klasse als Argument, während Sie sie instanziieren.

Beispiel:

<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>

Alternativer Ansatz:

Wenn die innere Klasse keinen Zugriff auf eine umschließende Klasseninstanz benötigt, kann sie als statisch verschachtelte Klasse definiert werden. Dadurch entfällt die Abhängigkeit von der umschließenden Klasse.

Beispiel einer statischen verschachtelten Klasse:

<code class="java">public class Mother {
     public static class Child {
          public void doStuff() {
              // ...
          }
     }
}</code>

Das obige ist der detaillierte Inhalt vonWie können Sie eine innere Klasse mithilfe von Java Reflection ohne eine Instanz der umschließenden Klasse instanziieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn