Das Erstellen von Instanzen innerer Klassen mithilfe von Reflection in Java kann häufig zu Ausnahmen führen, die der hier aufgetretenen ähneln. Um dieses Problem zu lösen, ist es von entscheidender Bedeutung, die Nuancen der Instanziierung innerer Klassen durch Reflexion zu verstehen.
Beim Versuch, eine innere Klasse direkt über Class.forName(...) und newInstance() zu instanziieren, tritt die zugrunde liegende InstantiationException auf, weil inner Klassen haben einen zusätzlichen „versteckten“ Parameter – die Instanz der umschließenden Klasse.
Um dies zu beheben, verwenden Sie den folgenden Ansatz:
Zum Beispiel:
<code class="java">// Exception handling omitted Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); Object enclosingInstance = enclosingClass.newInstance(); Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Wenn die innere Klasse alternativ keinen Zugriff auf die umschließende Klasse benötigt, sollten Sie sie stattdessen als verschachtelte statische Klasse deklarieren, wie hier dargestellt:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Das obige ist der detaillierte Inhalt vonSo instanziieren Sie innere Klassen mit Reflection in Java: Warum brauchen wir eine umschließende Klasseninstanz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!