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!