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