Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加新类时处理依赖的Java库?_Java_Oop_Classpath - Fatal编程技术网

添加新类时处理依赖的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