Java 参数,静态ServiceLoader.load()方法的返回值?
实际上,这是一个由三部分组成的问题 当我查看它所包含的Java 参数,静态ServiceLoader.load()方法的返回值?,java,service,serviceloader,Java,Service,Serviceloader,实际上,这是一个由三部分组成的问题 当我查看它所包含的ServiceLoader类的static ServiceLoader.load()方法的文档时 publicstaticserviceloader加载(类服务) 1我需要知道如何调用这个方法,这个参数是什么类服务 假设SomeClass是一个接口或抽象类 我在示例中看到它使用了ServiceLoader.load(SomeClass.class) 2这里的class关键字在做什么?我们不能简单地支持SomeClass作为参数吗 像这样, S
ServiceLoader
类的static ServiceLoader.load()方法的文档时
publicstaticserviceloader加载(类服务)
1我需要知道如何调用这个方法,这个参数是什么类服务
假设SomeClass
是一个接口或抽象类
我在示例中看到它使用了ServiceLoader.load(SomeClass.class)
2这里的class
关键字在做什么?我们不能简单地支持SomeClass
作为参数吗
像这样,
ServiceLoader.load(SomeClass)
在它包含的文档中,这个方法返回一个新的服务加载器,我对此感到困惑
3此方法是否返回接口所有实现的数组
类别服务
是服务类型的类别;e、 g.应由服务提供商实现的接口或抽象类load
方法是一个静态方法,所以要调用它,只需使用ServiceLoader.load(SomeService.class)
语法即可
在负载(类服务)
中,参数为服务类型的类;因此,调用此方法时应指示.class
load(类服务)
返回ServiceLoader
类的新实例。此类实现了Iterable
接口。当您为此实例调用iterator()
时,将返回一个迭代器,该迭代器将延迟加载此加载程序服务的提供程序
这里提供了一个示例代码,meybe可以提供帮助。适配器
接口是应该由服务提供商实现的服务:
import java.util.Map;
public interface Adapter {
String getName();
String getApiVersion();
void initialize();
int calculateScore(Map<String, String> data);
}
import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;
public final class AdapterManager {
private final static ArrayList<Adapter> adapters = new ArrayList<>();
private final static AdapterManager INSTANCE = new AdapterManager();
private AdapterManager() {
load();
}
private static void load() {
updateAdapters(findServiceProviders());
}
private static List<Adapter> findServiceProviders() {
ServiceLoader<Adapter> serviceLoader = ServiceLoader.load(Adapter.class);
List<Adapter> providerList = new ArrayList<>();
for (Adapter provider : serviceLoader) {
providerList.add(provider);
}
return providerList;
}
private static synchronized void updateAdapters(List<Adapter> adapterProviders) {
adapters.clear();
adapters.addAll(adapterProviders);
}
public static AdapterManager getInstance() {
return INSTANCE;
}
public void reload() {
load();
}
public Adapter getAdapter(String name) {
if (name == null) {
throw new IllegalArgumentException("Adapter name must not be null");
}
for (Adapter adapter : adapters) {
if (name.equals(adapter.getName())) {
return adapter;
}
}
return null;
}
}
1.你读了吗?2. <代码>某个类。类
是一个类。3.不。它返回一个ServiceLoader
@AndyTurner是的,但是我对在ServiceLoader.load(SomeClass.class)中使用class
关键字感到困惑。这可能有助于理解=>class
也是一个class
!