Вот пример программы, протестированной на Java 1.5.Исключение при открытии внутреннего класса доступа
Интересно, почему два подхода ниже имеют разные результаты. Это ошибка или своего рода Java-функция?
package test;
public class TestOut {
public static void main(String[] args) {
// works
new TestIn();
// throws IllegalAccessException
Class.forName("test.TestOut$TestIn").newInstance();
}
private static class TestIn {
}
}
Почему явный 'новый' работает, даже если это' частный'? – polygenelubricants
Я думаю, потому что отражение устраняет контекст, а контекст заключается в том, что внутренний класс принадлежит внешнему. Сам объект класса сохраняет ссылку на охватывающий класс, но конструктор этого не делает. – Bozho
3x, Bozho. «контекст» - это то, что мне действительно интересно. ИМХО, у Конструктора должно быть достаточно информации, чтобы знать класс enclsong, и нет никаких оснований для его реализации таким образом. – MikeJiang