我的应用程序使用ServiceLoader,我有两种类型的服务: 算法和导出器。代码:
public abstract class Algorithm<E> {
public abstract E process();
public abstract void askParameters();
}
public abstract class Exporter<E> {
public abstract void export(E element);
public abstract void askParameters();
}
我有另一个类,Executor,&#34; wire&#34;算法和出口商在一起:
public class Executor<T, A extends Algorithm<T>, E extends Exporter<T>> {
A algo;
E exporter;
public Executor(A a, E e){
algo = a;
exporter = e;
}
public void execute(){
algo.askParameters();
exporter.askParameters();
exporter.export(algo.process());
}
}
团队成员独立地为几种类型的事物编写代码算法和导出器。他们把它放在一个jar中,注册算法或导出器的服务提供者,而应用程序的核心在于组合这些模块。
我写了那个小测试:
public class MainTestServiceLoader {
public static void main(String[] args) {
AlgorithmService algoService = new AlgorithmService();
ExporterService exporterService = new ExporterService();
Algorithm<Labyrinth> braidMaze = algoService.getAlgorithm1();
Exporter<Labyrinth> toLvl = exporterService.getExporter1();
Executor<Labyrinth,Algorithm<Labyrinth>,Exporter<Labyrinth>> executor = new Executor(braidMaze,toLvl);
executor.execute();
}
}
但我预见到未来的问题。由于加载程序不知道算法或导出程序的特定类型,我如何确定两者的组合是兼容的?或者有没有办法过滤服务加载器中的服务,具体取决于算法/出口的工作类型? 谢谢你
编辑:为了更清楚:让我们说有人编码模块算法,而另一个代码是导出器。它们将以相同的方式加载到ServiceLoader中。有没有办法区别他们?