próbuję instancję klasy wewnętrzny zdefiniowany w następujący kod Java:Jak utworzyć instancję klasy wewnętrznej z odbiciem w Javie?
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
Kiedy próbuję dostać wystąpienie dziecko lubi tego
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
otrzymuję ten wyjątek:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Czego mi brakuje?
Uhm, twoja wewnętrzna klasa nie jest statyczna ... Czy to celowo? Może pochodzić z tła C#? ;) – fge
Dzięki za sugestię "statycznego" pomysłu! W rzeczywistości używanie statycznej klasy zagnieżdżonej zamiast klasy wewnętrznej ułatwia życie. – Stephan
Chodzi o to, że jeśli klasa wewnętrzna nie jest zadeklarowana jako statyczna, instancje tej klasy zależą od istnienia instancji klasy zewnętrznej; różni się to od języka C#, w którym wszystkie klasy wewnętrzne są domyślnie "statyczne" i mogą być tworzone bez instancji nadrzędnej. – fge