To 1): f2
относится к типу FooTest$1
, который расширяет Foo
, но не печатается, вы просто получаете текущий класс и никаких суперклассов или интерфейсов.
To 2):Так как 1) ложно, здесь нет вопроса:)
To 3): Проблема в том, что анонимному внутреннему классу FooTest$1
необходим внешний экземпляр FooTest
для создания.Вызов конструктора через отражение попытался бы создать новый экземпляр без включающего экземпляра FooTest
, и такой метод недоступен (т. Е. Метод, который создает экземпляр внутреннего класса без экземпляравключающий класс).
Вам нужно получить конструктор, который принимает экземпляр включающего класса в качестве параметра.Для получения дополнительной информации посмотрите на этот вопрос: Можно ли создать экземпляр вложенного класса с помощью Java Reflection?
Редактировать :
Я снова прочитал ваш код и мне стыдно, что я пропустил это: класс FooTest$1
на самом деле является статическим внутренним классом, поскольку он создается в методе static main.Таким образом, у него нет конструктора, принимающего экземпляр класса.
Однако, поскольку вы создаете класс и его встроенный конструктор, этот конструктор не является общедоступным.Таким образом, getClass().getConstructor()
не вернет его (этот класс будет возвращать только открытые конструкторы. В этом случае вы должны использовать getClass().getDeclaredConstructor()
. То же самое верно для полей и методов, только для записи.