处理依赖 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(ClassA
、ClassB
等..)是从库中加载的。
现在,虽然这行得通,但它非常混乱,任何时候在库中创建一个新的 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>
。
我的应用程序具有以下架构:
我有数量可变的 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(ClassA
、ClassB
等..)是从库中加载的。
现在,虽然这行得通,但它非常混乱,任何时候在库中创建一个新的 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>
。