Package org.apache.lucene.util

# Class NamedSPILoader<S extends NamedSPILoader.NamedSPI>

java.lang.Object
org.apache.lucene.util.NamedSPILoader<S>

All Implemented Interfaces:
  `Iterable<S>`

public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> extends Object implements Iterable<S>
Helper class for loading named SPIs from classpath (e.g. Codec, PostingsFormat).

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static interface`
  `NamedSPILoader.NamedSPI`
  Interface to support `lookup(String)` by name.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `NamedSPILoader(Class<S> clazz)`
  `NamedSPILoader(Class<S> clazz, ClassLoader classloader)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Set<String>`
  `availableServices()`
  `static void`
  `checkServiceName(String name)`
  Validates that a service name meets the requirements of `NamedSPILoader.NamedSPI`
  `Iterator<S>`
  `iterator()`
  `S`
  `lookup(String name)`
  `void`
  `reload(ClassLoader classloader)`
  Reloads the internal SPI list from the given `ClassLoader`.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface java.lang.Iterable

  `forEach, spliterator`

- ## Constructor Details

  - ### NamedSPILoader

    public NamedSPILoader(Class<S> clazz)

  - ### NamedSPILoader

    public NamedSPILoader(Class<S> clazz, ClassLoader classloader)

- ## Method Details

  - ### reload

    public void reload(ClassLoader classloader)
    Reloads the internal SPI list from the given `ClassLoader`. Changes to the service list are visible after the method ends, all iterators (`iterator()`,...) stay consistent.

    NOTE: Only new service providers are added, existing ones are never removed or replaced.

    This method is expensive and should only be called for discovery of new service providers on the given classpath/classloader!

  - ### checkServiceName

    public static void checkServiceName(String name)
    Validates that a service name meets the requirements of `NamedSPILoader.NamedSPI`

  - ### lookup

    public S lookup(String name)

  - ### availableServices

    public Set<String> availableServices()

  - ### iterator

    public Iterator<S> iterator()
    Specified by:
      `iterator` in interface `Iterable<S extends NamedSPILoader.NamedSPI>`