Как загрузить вложенные классы в 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");