Нет, к сожалению, по той же причине, по которой вы не можете перечислять обычные классы в пакете.
Внутренние классы - это действительно обычные классы во время выполнения. Компилятор вносит некоторые изменения, чтобы обойти обычные правила доступа. Например, внутренний класс, кажется, может получить доступ к закрытым полям и методам включающего класса - он может сделать это, потому что компилятор создает не закрытую функцию доступа, которая является используется внутренним классом. Подробнее см. Java в двух словах - как работают внутренние классы .
Внутренние классы - это обычные классы, и они не могут быть надежно перечислены, поэтому общий ответ - нет, невозможно.
Однако, это может быть решено в определенных случаях. Если вам известны используемые вами JAR-файлы, вы можете выполнить итерацию по всем файлам в JAR-файле, ища файлы шаблона yourpakage.YourClass$<something>.class
, где <something>
- один или несколько символов.
EDIT:
Существуют различные типы внутреннего класса:
- объявленные члены, такие как интерфейсы и классы
- Анонимные классы и локальные классы
Если вас волнует только первый случай, то ответ BalusC с использованием getDeclaredClasses
является правильным. Если вы хотите все внутренние классы, то, к сожалению, getDeclaredClasses
не сработает. См. SDN Bug 4191731 . В этом случае вы можете попробовать один из методов перечисления классов, предложенных в ссылке (например, сканирование файла JAR.)