Обрабатывать зависимую библиотеку Java, добавляя новые классы?

Мое приложение имеет следующую архитектуру:

У меня есть переменное количество классов, реализующих определенный интерфейс в библиотеке. (Все эти классы реализуют один и тот же интерфейс).

Все они создаются методом, помещаются в список и отправляются некоторой функции, которая каким-то образом их обрабатывает.

public class Initialize {

    public static void main(String[] args){

         ClassInterface num1 = new ClassA();
         ClassInterface num2 = new ClassB();
         ...
         ClassInterface numX = new ClassX();

         List<ClassInterface> list = new ArrayList<ClassInterface>();
         list.add(num1, num2, num3.....);

         processList(list);
    }

}

Вышеуказанные классы (ClassA, ClassB и т. д.) загружаются из библиотеки.

Теперь, хотя это работает, это невероятно беспорядочно, и каждый раз, когда в библиотеке создается новый класс, реализующий ClassInterface, требуется перекомпилировать вышеуказанную программу (хотя на самом деле ничего не изменилось).

Есть ли лучший подход к такой проблеме? Или я упускаю что-то очевидное?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
24
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать библиотеку Размышления для сканирования всех классов, реализующих ClassInterface, из пути к классам.

Reflections reflections = new Reflections("my.package");
Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(ClassInterface.class);

Рассмотрим комбинацию java.util.ServiceLoader и AutoService, чтобы вы могли просто написать ServiceLoader.load(ClassInterface.class) и получить Iterable<ClassInterface>.

Другие вопросы по теме