Wie man eine nicht statische innere Klasse mit Reflektion in Java instanziiert?
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 ?
Kommentar zu dem Problem - Öffnen
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 ist, 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.
InformationsquelleAutor der Frage Stephan | 2013-07-05
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:
InformationsquelleAutor der Antwort Jon Skeet
Diesem code erstellen, die innere Instanz der Klasse.
InformationsquelleAutor der Antwort Gabriel Fernandez