处理依赖 Java 库添加新的 类?

Handle dependent Java library adding new classes?

我的应用程序具有以下架构:

我有数量可变的 classes 在库中实现特定接口。 (这些 classes 都实现了完全相同的接口)。

这些都是由一个方法实例化的,放在一个列表中,然后发送给以某种方式处理它们的某个函数。

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);
    }

}

以上classes(ClassAClassB等..)是从库中加载的。

现在,虽然这行得通,但它非常混乱,任何时候在库中创建一个新的 class 实现 ClassInterface 它需要重新编译上面的程序(即使没有真正改变) .

有没有更好的方法来解决这类问题?还是我遗漏了一些明显的东西?

您可以使用 Reflections 库从 class 路径扫描所有实现 ClassInterface 的 classes。

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

考虑 java.util.ServiceLoader and AutoService 的组合,因此您可以只写 ServiceLoader.load(ClassInterface.class) 并得到 Iterable<ClassInterface>