我尝试使用Java ServiceLoader查找实现特定接口(interface)的所有类,如下所示:
loader = ServiceLoader.load(Operation.class);
try {
for (Operation o : loader) {
operations.add(o);
}
} catch (ServiceConfigurationError e) {
LOGGER.log(Level.SEVERE, "Uncaught exception", e);
}
不幸的是,当我在 Debug模式下运行Eclipse时,ServiceLoader找不到任何类。我觉得我错过了一个琐碎的事情...
最佳答案
ServiceLoader
无法做到。
为了将类公开为ServiceLoader
可以发现的服务,您需要将其名称放入提供程序配置文件中,如Creating Extensible Applications With the Java Platform中所述。
没有内置的方法可以找到实现特定接口(interface)的所有类。可以执行类似操作的框架使用它们自己的类路径扫描解决方案(即使使用自定义类路径扫描也不容易,因为.class
文件仅存储有关直接实现的接口(interface)的信息,而不是传递性地)。