Обрабатывать зависимую библиотеку Java, добавляя новые классы? - PullRequest
0 голосов
/ 22 января 2019

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

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

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

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создается в библиотеке и требует перекомпиляции вышеуказанной программы (даже если на самом деле ничего не изменилось).

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

Ответы [ 2 ]

0 голосов
/ 22 января 2019

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

0 голосов
/ 22 января 2019

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

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