添加新类时处理依赖的Java库?
我的应用程序具有以下体系结构: 我在库中有很多实现特定接口的类。(这些类都实现了完全相同的接口) 这些都由一个方法实例化,放在一个列表中,然后发送给以某种方式处理它们的某个函数添加新类时处理依赖的Java库?,java,oop,classpath,Java,Oop,Classpath,我的应用程序具有以下体系结构: 我在库中有很多实现特定接口的类。(这些类都实现了完全相同的接口) 这些都由一个方法实例化,放在一个列表中,然后发送给以某种方式处理它们的某个函数 public class Initialize { public static void main(String[] args){ ClassInterface num1 = new ClassA(); ClassInterface num2 = new ClassB();
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);
}
}
公共类初始化{
公共静态void main(字符串[]args){
ClassInterface num1=新ClassA();
ClassInterface num2=新的ClassB();
...
ClassInterface numX=新ClassX();
列表=新的ArrayList();
添加(num1、num2、num3…);
进程列表(列表);
}
}
上述类(ClassA
,ClassB
等)是从库中加载的
现在,虽然这样做有效,但它非常混乱,任何时候在库中创建一个实现ClassInterface
的新类时,都需要重新编译上述程序(即使实际上没有任何更改)
有没有更好的方法来解决这类问题?还是我遗漏了一些明显的东西?您可以使用库从类路径扫描实现ClassInterface
的所有类
Reflections reflections = new Reflections("my.package");
Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(ClassInterface.class);
Reflections=newreflections(“my.package”);
设置考虑和的组合,这样您就可以编写ServiceLoader.load(ClassInterface.class)
并获得一个Iterable