Wie zu instanziieren, die eine innere Klasse mit reflection in Java?
Ich versuche zum instanziieren des inneren Klasse definiert, in der folgende Java-code:
public class Mother {
public class Child {
public void doStuff() {
//...
}
}
}
Wenn ich versuche, eine Instanz von Kind
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
Bekomme ich diese exception:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Was bin ich ?
- Uhm, deine innere Klasse nicht statisch ist... Ist das Absicht? Aus einem C# - hintergrund vielleicht? 😉
- Dank für die Annahme "statische" Idee! In der Tat, mit einer statisch geschachtelten Klasse statt eine innere Klasse machen das mein Leben erleichtert.
- Die Sache ist die, wenn eine innere Klasse ist nicht als static deklariert, Instanzen dieser Klasse hängt von der Existenz einer Instanz der äußeren Klasse; dies ist anders als bei C#, wo alle inneren Klassen sind "statisch", indem Standard-und instanziiert werden können, ohne eine übergeordnete Instanz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine zusätzliche "versteckte" parameter, der die Instanz der umschließenden Klasse. Sie brauchen, um auf den Konstruktor mit
- Klasse.getDeclaredConstructor
und liefern dann eine Instanz der umschließenden Klasse als argument. Zum Beispiel:EDIT: Alternativ, wenn die geschachtelte Klasse nicht tatsächlich Notwendigkeit zu finden zu einem umschließenden Instanz, machen es zu einem verschachtelten statische Klasse statt:
ctor.setAccessible(true)
um es zu schaffen!Diesem code erstellen, die innere Instanz der Klasse.