Package org.apache.lucene.util

## Class SetOnce<T>

- java.lang.Object
- - org.apache.lucene.util.SetOnce<T>

- All Implemented Interfaces:
    `Cloneable`

      public final class SetOnce<T>
      extends Object
      implements Cloneable

  A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If `set(Object)` is called more than once, `SetOnce.AlreadySetException` is thrown and the operation will fail.
  WARNING: This API is experimental and might change in incompatible ways in the next release.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `SetOnce.AlreadySetException` | Thrown when `set(Object)` is called more than once.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SetOnce()` | A default constructor which does not set the internal object, and allows setting it by calling `set(Object)`.
    `SetOnce​(T obj)` | Creates a new instance with the internal object set to the given object.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `T` | `get()` | Returns the object set by `set(Object)`.
    `void` | `set​(T obj)` | Sets the given object.
    `boolean` | `trySet​(T obj)` | Sets the given object if none was set before.

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

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

- - ### Constructor Detail

    - #### SetOnce

          public SetOnce()

      A default constructor which does not set the internal object, and allows setting it by calling `set(Object)`.

    - #### SetOnce

          public SetOnce​(T obj)

      Creates a new instance with the internal object set to the given object. Note that any calls to `set(Object)` afterwards will result in `SetOnce.AlreadySetException`
      Throws:
        `SetOnce.AlreadySetException` - if called more than once
      See Also:
        `set(Object)`

  - ### Method Detail

    - #### set

          public final void set​(T obj)

      Sets the given object. If the object has already been set, an exception is thrown.

    - #### trySet

          public final boolean trySet​(T obj)

      Sets the given object if none was set before.
      Returns:
        true if object was set successfully, false otherwise

    - #### get

          public final T get()

      Returns the object set by `set(Object)`.