„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie instanziiere ich verschachtelte Klassen in Java mithilfe von Reflection?

Wie instanziiere ich verschachtelte Klassen in Java mithilfe von Reflection?

Veröffentlicht am 15.11.2024
Durchsuche:285

How to Instantiate Nested Classes in Java Using Reflection?

Instantiierung verschachtelter Klassen in Java über Reflection

Die Unfähigkeit, die im bereitgestellten Java-Code definierte innere Klasse mithilfe von Standard-Reflection-Methoden zu instanziieren, ist eine häufige Falle, mit der Java-Entwickler konfrontiert sind. Beim Versuch, eine Instanz direkt mit Class.newInstance() zu erstellen, tritt das Problem auf, weil ein versteckter Parameter vorhanden ist, der eine Instanz der umschließenden Klasse darstellt.

Um eine innere Klasse erfolgreich zu instanziieren, ist es notwendig, sie zu verwenden Class.getDeclaredConstructor(), um auf den Konstruktor zuzugreifen und eine Instanz der umschließenden Klasse als Argument bereitzustellen. Der folgende Codeausschnitt veranschaulicht diesen Ansatz:

// Exceptions omitted for brevity
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);

Wenn die verschachtelte Klasse alternativ nicht von der umschließenden Instanz abhängig ist, besteht eine einfachere Lösung darin, sie als statische verschachtelte Klasse zu deklarieren:

public class Mother {
    public static class Child {
        public void doStuff() {
            // ...
        }
    }
}

Durch die Verwendung dieser Ansätze können Entwickler sowohl abhängige als auch unabhängige innere Klassen mithilfe der Reflektion in Java effektiv instanziieren.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3