Package oracle.dbtools.plugin.api.di

## Class DeferredInstanceProvider<T>

- java.lang.Object
- - oracle.dbtools.plugin.api.di.DeferredInstanceProvider<T>

- Type Parameters:
    `T` - The type of instance to provide
  All Implemented Interfaces:
    `jakarta.inject.Provider<T>`, `java.lang.Iterable<T>`, `java.util.function.Supplier<T>`, `InstanceProvider<T>`

      public class DeferredInstanceProvider<T>
      extends java.lang.Object
      implements InstanceProvider<T>

  `InstanceProvider` implementation that defers resolving an instance until `get()`, `hasMultiple()`, `isUnsatisfied()`, or `iterator()` is invoked
  Since:
    19.3.0
  Author:
    cdivilly

- - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <T> DeferredInstanceProvider<T>` | `from​(TypeQualifier<T> service, InstanceLocator locator)` | Instantiate a `DeferredInstanceProvider`
    `T` | `get()` | Retrieve the first available instance
    `boolean` | `hasMultiple()` | Determines if there is more than one available implementation for the required type and qualifiers
    `boolean` | `isUnsatisfied()` | Determines if there is no available implementation for the required type and qualifiers.
    `java.util.Iterator<T>` | `iterator()` | When a service has multiple providers (which can be determined by calling `InstanceProvider.isAmbiguous()`) this iterator enumerates each of the available providers
    `TypeQualifier<T>` | `qualifier()` | Identifies the constraints used to select matches
    `java.lang.String` | `toString()` |

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

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

    - ### Methods inherited from interface oracle.dbtools.plugin.api.di.InstanceProvider

      `getOrNull, isAmbiguous, isAvailable, isUnavailable, orElse, stream`

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

      `forEach, spliterator`

- - ### Method Detail

    - #### get

          public T get()

      Description copied from interface: `InstanceProvider`
      Retrieve the first available instance
      Specified by:
        `get` in interface `InstanceProvider<T>`
      Specified by:
        `get` in interface `jakarta.inject.Provider<T>`
      Specified by:
        `get` in interface `java.util.function.Supplier<T>`
      Returns:
        the first available instance

    - #### hasMultiple

          public boolean hasMultiple()

      Description copied from interface: `InstanceProvider`
      Determines if there is more than one available implementation for the required type and qualifiers
      Specified by:
        `hasMultiple` in interface `InstanceProvider<T>`
      Returns:
        true if there are multiple providers, false otherwise

    - #### isUnsatisfied

          public boolean isUnsatisfied()

      Description copied from interface: `InstanceProvider`
      Determines if there is no available implementation for the required type and qualifiers. If this method returns true, then calling `InstanceProvider.get()` will raise a `RuntimeException`
      Specified by:
        `isUnsatisfied` in interface `InstanceProvider<T>`
      Returns:
        true if there is no provider, false otherwise

    - #### iterator

          public java.util.Iterator<T> iterator()

      Description copied from interface: `InstanceProvider`
      When a service has multiple providers (which can be determined by calling `InstanceProvider.isAmbiguous()`) this iterator enumerates each of the available providers
      Specified by:
        `iterator` in interface `InstanceProvider<T>`
      Specified by:
        `iterator` in interface `java.lang.Iterable<T>`
      Returns:
        The set of available providers

    - #### qualifier

          public TypeQualifier<T> qualifier()

      Description copied from interface: `InstanceProvider`
      Identifies the constraints used to select matches
      Specified by:
        `qualifier` in interface `InstanceProvider<T>`
      Returns:
        `TypeQualifier` instance

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### from

          public static <T> DeferredInstanceProvider<T> from​(TypeQualifier<T> service,
                                                             InstanceLocator locator)

      Instantiate a `DeferredInstanceProvider`
      Type Parameters:
        `T` - The type of instance to provide
      Parameters:
        `service` - The service that needs to be provided
        `locator` - The locator that can provide the service.
      Returns:
        `DeferredInstanceProvider`