com.google.common.reflect

## Interface TypeToInstanceMap<B>

- Type Parameters:
    `B` - the common supertype that all entries must share; often this is simply `Object`
  All Superinterfaces:
    java.util.Map<TypeToken<? extends B>,B>
  All Known Implementing Classes:
    ImmutableTypeToInstanceMap, MutableTypeToInstanceMap

      @Beta
      public interface TypeToInstanceMap<B>
      extends java.util.Map<TypeToken<? extends B>,B>

  A map, each entry of which maps a `TypeToken` to an instance of that type. In addition to implementing `Map`, the additional type-safe operations `putInstance(java.lang.Class<T>, T)` and `getInstance(java.lang.Class<T>)` are available.

  Generally, implementations don't support `Map.put(K, V)` and `Map.putAll(java.util.Map<? extends K, ? extends V>)` because there is no way to check an object at runtime to be an instance of a `TypeToken`. Instead, caller should use the type safe `putInstance(java.lang.Class<T>, T)`.

  Also, if caller suppresses unchecked warnings and passes in an `Iterable<String>` for type `Iterable<Integer>`, the map won't be able to detect and throw type error.

  Like any other `Map<Class, Object>`, this map may contain entries for primitive types, and a primitive type and its corresponding wrapper type may map to different values.

  Since:
    13.0

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `java.util.Map.Entry<K,V>`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `<T extends B> T` | `getInstance(java.lang.Class<T> type)` Returns the value the specified class is mapped to, or `null` if no entry for this class is present.
    `<T extends B> T` | `getInstance(TypeToken<T> type)` Returns the value the specified type is mapped to, or `null` if no entry for this type is present.
    `<T extends B> T` | `putInstance(java.lang.Class<T> type, T value)` Maps the specified class to the specified value.
    `<T extends B> T` | `putInstance(TypeToken<T> type, T value)` Maps the specified type to the specified value.

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

      `clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values`

- - ### Method Detail

    - #### getInstance

          @Nullable
          <T extends B> T getInstance(java.lang.Class<T> type)

      Returns the value the specified class is mapped to, or `null` if no entry for this class is present. This will only return a value that was bound to this specific class, not a value that may have been bound to a subtype.

      `getInstance(Foo.class)` is equivalent to `getInstance(TypeToken.of(Foo.class))`.

    - #### putInstance

          @Nullable
          <T extends B> T putInstance(java.lang.Class<T> type,
                                             @Nullable
                                             T value)

      Maps the specified class to the specified value. Does not associate this value with any of the class's supertypes.

      `putInstance(Foo.class, foo)` is equivalent to `putInstance(TypeToken.of(Foo.class), foo)`.

      Returns:
        the value previously associated with this class (possibly `null`), or `null` if there was no previous entry.

    - #### getInstance

          @Nullable
          <T extends B> T getInstance(TypeToken<T> type)

      Returns the value the specified type is mapped to, or `null` if no entry for this type is present. This will only return a value that was bound to this specific type, not a value that may have been bound to a subtype.

    - #### putInstance

          @Nullable
          <T extends B> T putInstance(TypeToken<T> type,
                                             @Nullable
                                             T value)

      Maps the specified type to the specified value. Does not associate this value with any of the type's supertypes.
      Returns:
        the value previously associated with this type (possibly `null`), or `null` if there was no previous entry.