cerco di creare un'istanza della classe interna definita nel seguente codice Java:Come istanziare la classe interna con la riflessione in Java?
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
Quando provo ad ottenere un'istanza del bambino come questo
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
ottengo questa eccezione:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Cosa mi manca?
Uhm, la tua classe interiore non è statica ... È apposta? Venendo da uno sfondo in C# forse? ;) – fge
Grazie per aver suggerito un'idea "statica"! In effetti, usare una classe nidificata statica invece di una classe interiore mi semplifica la vita. – Stephan
La cosa è, se una classe interna non è dichiarata statica, le istanze di questa classe dipendono dall'esistenza di un'istanza della classe esterna; questo è diverso da C# in cui tutte le classi interne sono "statiche" per impostazione predefinita e possono essere istanziate senza un'istanza padre. – fge