Чтобы понять, как это сделать с помощью отражения:
Вы можете начать с Thread.currentThread().getContextClassLoader()
.
Используя имя пакета в качестве пути, получите ресурсы: Enumeration<URL> resources = classLoader.getResources(path);
Тогда вам придется декодировать имена файлов из ресурсов и выполнять итерацию по ним (рекурсивно, поскольку некоторые из них могут быть каталогами). Отфильтруйте ресурсы для файлов .class
, создайте экземпляры классов с помощью Class.forName()
и проверьте интерфейсы, которые они реализуют.