Как загрузить вложенные классы в Java?
У меня есть следующий код Java:
public class CheckInnerStatic {
private static class Test {
static {
System.out.println("Static block initialized");
}
public Test () {
System.out.println("Constructor called");
}
}
public static void main (String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
System.out.println("Inside main");
Class.forName("Test"); // Doesn't work, gives ClassNotFoundException
//Test test = new Test(); // Works fine
}
}
Почему не работает class.forName("Test")
, пока следующая строка работает нормально?
Ответы
Ответ 1
Используйте Outer$Nested
(независимо от того, является ли вложенный класс статическим или нет)
public class CheckInnerStatic {
private static class Test {
static {
System.out.println("Static block initialized");
}
public Test () {
System.out.println("Constructor called");
}
}
public static void main (String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
System.out.println("Inside main");
Class<?> cls = Class.forName("CheckInnerStatic$Test");
//Test test = new Test();
}
}
Ответ 2
Вам нужно использовать полное имя класса, т.е. yourpackage.CheckInnerStatic$Test
(при условии, что вы определили пакет, иначе пропустите эту часть).
Ответ 3
Class innerClass = Class.forName("com.foo.OuterClass$InnerClass");