Interners
Date: 2016-05-24

com.google.common.collect

## Class Interners

- java.lang.Object
- - com.google.common.collect.Interners

-     @Beta
      public final class Interners
      extends java.lang.Object

  Contains static methods pertaining to instances of `Interner`.
  Since:
    3.0

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <E> Function<E,E>` | `asFunction(Interner<E> interner)` Returns a function that delegates to the `Interner.intern(E)` method of the given interner.
    `static <E> Interner<E>` | `newStrongInterner()` Returns a new thread-safe interner which retains a strong reference to each instance it has interned, thus preventing these instances from being garbage-collected.
    `static <E> Interner<E>` | `newWeakInterner()` Returns a new thread-safe interner which retains a weak reference to each instance it has interned, and so does not prevent these instances from being garbage-collected.

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

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

- - ### Method Detail

    - #### newStrongInterner

          public static <E> Interner<E> newStrongInterner()

      Returns a new thread-safe interner which retains a strong reference to each instance it has interned, thus preventing these instances from being garbage-collected. If this retention is acceptable, this implementation may perform better than `newWeakInterner()`. Note that unlike `String.intern()`, using this interner does not consume memory in the permanent generation.

    - #### newWeakInterner

          @GwtIncompatible(value="java.lang.ref.WeakReference")
          public static <E> Interner<E> newWeakInterner()

      Returns a new thread-safe interner which retains a weak reference to each instance it has interned, and so does not prevent these instances from being garbage-collected. This most likely does not perform as well as `newStrongInterner()`, but is the best alternative when the memory usage of that implementation is unacceptable. Note that unlike `String.intern()`, using this interner does not consume memory in the permanent generation.

    - #### asFunction

          public static <E> Function<E,E> asFunction(Interner<E> interner)

      Returns a function that delegates to the `Interner.intern(E)` method of the given interner.
      Since:
        8.0