org.apache.lucene.util

## Class SPIClassIterator<S>

- java.lang.Object
- - org.apache.lucene.util.SPIClassIterator<S>

- All Implemented Interfaces:
    Iterator<Class<? extends S>>

      public final class SPIClassIterator<S>
      extends Object
      implements Iterator<Class<? extends S>>

  Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of `ServiceLoader` but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found.
  NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <S> SPIClassIterator<S>` | `get(Class<S> clazz)` Creates a new SPI iterator to lookup services of type `clazz` using the same `ClassLoader` as the argument.
    `static <S> SPIClassIterator<S>` | `get(Class<S> clazz, ClassLoader loader)` Creates a new SPI iterator to lookup services of type `clazz` using the given classloader.
    `boolean` | `hasNext()`
    `static boolean` | `isParentClassLoader(ClassLoader parent, ClassLoader child)` Utility method to check if some class loader is a (grand-)parent of or the same as another one.
    `Class<? extends S>` | `next()`
    `void` | `remove()`

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

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

    - ### Methods inherited from interface java.util.Iterator

      `forEachRemaining`

- - ### Method Detail

    - #### get

          public static <S> SPIClassIterator<S> get(Class<S> clazz)

      Creates a new SPI iterator to lookup services of type `clazz` using the same `ClassLoader` as the argument.

    - #### get

          public static <S> SPIClassIterator<S> get(Class<S> clazz,
                                                    ClassLoader loader)

      Creates a new SPI iterator to lookup services of type `clazz` using the given classloader.

    - #### isParentClassLoader

          public static boolean isParentClassLoader(ClassLoader parent,
                                                    ClassLoader child)

      Utility method to check if some class loader is a (grand-)parent of or the same as another one. This means the child will be able to load all classes from the parent, too.

      If caller's codesource doesn't have enough permissions to do the check, `false` is returned (this is fine, because if we get a `SecurityException` it is for sure no parent).

    - #### hasNext

          public boolean hasNext()

      Specified by:
        `hasNext` in interface `Iterator<Class<? extends S>>`

    - #### next

          public Class<? extends S> next()

      Specified by:
        `next` in interface `Iterator<Class<? extends S>>`

    - #### remove

          public void remove()

      Specified by:
        `remove` in interface `Iterator<Class<? extends S>>`

Copyright © 2000-2022 Apache Software Foundation. All Rights Reserved.