- Java.util 包类
- Java.util - 首页
- Java.util - ArrayDeque
- Java.util - ArrayList
- Java.util - Arrays
- Java.util - BitSet
- Java.util - Calendar
- Java.util - Collections
- Java.util - Currency
- Java.util - Date
- Java.util - Dictionary
- Java.util - EnumMap
- Java.util - EnumSet
- Java.util - Formatter
- Java.util - GregorianCalendar
- Java.util - HashMap
- Java.util - HashSet
- Java.util - Hashtable
- Java.util - IdentityHashMap
- Java.util - LinkedHashMap
- Java.util - LinkedHashSet
- Java.util - LinkedList
- Java.util - ListResourceBundle
- Java.util - Locale
- Java.util - Observable
- Java.util - PriorityQueue
- Java.util - Properties
- Java.util - PropertyPermission
- Java.util - PropertyResourceBundle
- Java.util - Random
- Java.util - ResourceBundle
- Java.util - ResourceBundle.Control
- Java.util - Scanner
- Java.util - ServiceLoader
- Java.util - SimpleTimeZone
- Java.util - Stack
- Java.util - StringTokenizer
- Java.util - Timer
- Java.util - TimerTask
- Java.util - TimeZone
- Java.util - TreeMap
- Java.util - TreeSet
- Java.util - UUID
- Java.util - Vector
- Java.util - WeakHashMap
- Java.util 包额外内容
- Java.util - 接口
- Java.util - 异常
- Java.util - 枚举
- Java.util 有用资源
- Java.util - 有用资源
- Java.util - 讨论
Java ServiceLoader findFirst() 方法
描述
Java ServiceLoader findFirst() 方法加载此加载器的服务的第一个可用服务提供程序。此便捷方法等效于调用 iterator() 方法并获取第一个元素。因此,如果可能,它将返回提供程序缓存中的第一个元素;否则,它将尝试加载并实例化第一个提供程序。
声明
以下是java.util.ServiceLoader.findFirst() 方法的声明
public Optional<S> findFirst()
参数
无
返回值
此方法返回第一个服务提供程序,如果未找到任何服务提供程序,则返回空 Optional。
异常
ServiceConfigurationError − 如果由于上述错误部分中指定的任何原因无法加载提供程序类。
获取 ServiceLoader 实例示例
为了注册服务,我们需要在类路径中有一个 META-INF/services 文件夹。在这个特定文件夹中,我们需要一个文本文件,其名称为我们正在实现的接口的名称,其中包含一行列出实现的具体类名的单行文本。在我们的例子中,文件名是com.tutorialspoint.ServiceProvider,包含这一行:
com.tutorialspoint.ServiceImplementation
我们的服务代码如下:
package com.tutorialspoint; public class ServiceImplementation extends ServiceProvider { public String getMessage() { return "Hello World"; } }
以下代码加载已注册的服务并使用它从服务获取消息。我们创建了一个 getDefault() 方法,它返回一个 ServiceProvider。此方法使用 ServiceLoader.load() 获取一个 serviceLoader 对象。使用 serviceLoader.findFirst() 方法,我们检索了一个 ServiceProvider 的 Optional 对象,并使用 Optional.get() 方法返回 ServiceProvider 对象。然后使用 getDefault() 我们检索了 serviceProvider 并使用此对象打印了消息。
package com.tutorialspoint; import java.util.Optional; import java.util.ServiceLoader; public abstract class ServiceProvider { public static ServiceProvider getDefault() { // load our plugin ServiceLoader<ServiceProvider> serviceLoader = ServiceLoader.load(ServiceProvider.class); Optional<ServiceProvider> serviceProvider = serviceLoader.findFirst(); return serviceProvider.get(); } public abstract String getMessage(); public static void main(String[] ignored) { // create a new provider and call getMessage() ServiceProvider provider = ServiceProvider.getDefault(); System.out.println(provider.getMessage()); } }
输出
让我们编译并运行上述程序,这将产生以下结果:
Hello World
java_util_serviceloader.htm
广告