@GwtCompatible(serializable = true)
  public static <K extends Enum<K>, V> ImmutableMap<K, V> immutableEnumMap(
      Map<K, ? extends V> map) {
    if (map instanceof ImmutableEnumMap) {
      @SuppressWarnings("unchecked") // safe covariant cast
      ImmutableEnumMap<K, V> result = (ImmutableEnumMap<K, V>) map;
      return result;
    }
    Iterator<? extends Entry<K, ? extends V>> entryItr = map.entrySet().iterator();
    if (!entryItr.hasNext()) {
      return ImmutableMap.of();
    }
    Entry<K, ? extends V> entry1 = entryItr.next();
    K key1 = entry1.getKey();
    V value1 = entry1.getValue();
    checkEntryNotNull(key1, value1);
    Class<K> clazz = key1.getDeclaringClass();
    EnumMap<K, V> enumMap = new EnumMap<>(clazz);
    enumMap.put(key1, value1);
    while (entryItr.hasNext()) {
      Entry<K, ? extends V> entry = entryItr.next();
      K key = entry.getKey();
      V value = entry.getValue();
      checkEntryNotNull(key, value);
      enumMap.put(key, value);
    }
    return ImmutableEnumMap.asImmutable(enumMap);
  }
@GwtCompatible(serializable = true)
  public static <K extends Enum<K>, V> ImmutableMap<K, V> immutableEnumMap(
      Map<K, ? extends V> map) {
    if (map instanceof ImmutableEnumMap) {
      @SuppressWarnings("unchecked") 
      ImmutableEnumMap<K, V> result = (ImmutableEnumMap<K, V>) map;
      return result;
    }
    Iterator<? extends Entry<K, ? extends V>> entryItr = map.entrySet().iterator();
    if (!entryItr.hasNext()) {
      return ImmutableMap.of();
    }
    Entry<K, ? extends V> entry1 = entryItr.next();
    K key1 = entry1.getKey();
    V value1 = entry1.getValue();
    checkEntryNotNull(key1, value1);
    Class<K> clazz = key1.getDeclaringClass();
    EnumMap<K, V> enumMap = new EnumMap<>(clazz);
    enumMap.put(key1, value1);
    while (entryItr.hasNext()) {
      Entry<K, ? extends V> entry = entryItr.next();
      K key = entry.getKey();
      V value = entry.getValue();
      checkEntryNotNull(key, value);
      enumMap.put(key, value);
    }
    return ImmutableEnumMap.asImmutable(enumMap);
  }
@ GwtCompatible ( serializable = true ) public static < K extends Enum < K > , V > ImmutableMap < K , V > immutableEnumMap ( Map < K , ? extends V > map ) { if ( map instanceof ImmutableEnumMap ) { @ SuppressWarnings ( "unchecked" ) // safe covariant cast ImmutableEnumMap < K , V > result = ( ImmutableEnumMap < K , V > ) map ; return result ; } Iterator < ? extends Entry < K , ? extends V > > entryItr = map . entrySet ( ) . iterator ( ) ; if ( ! entryItr . hasNext ( ) ) { return ImmutableMap . of ( ) ; } Entry < K , ? extends V > entry1 = entryItr . next ( ) ; K key1 = entry1 . getKey ( ) ; V value1 = entry1 . getValue ( ) ; checkEntryNotNull ( key1 , value1 ) ; Class < K > clazz = key1 . getDeclaringClass ( ) ; EnumMap < K , V > enumMap = new EnumMap <> ( clazz ) ; enumMap . put ( key1 , value1 ) ; while ( entryItr . hasNext ( ) ) { Entry < K , ? extends V > entry = entryItr . next ( ) ; K key = entry . getKey ( ) ; V value = entry . getValue ( ) ; checkEntryNotNull ( key , value ) ; enumMap . put ( key , value ) ; } return ImmutableEnumMap . asImmutable ( enumMap ) ; }
Returns an immutable map instance containing the given entries. Internally, the returned map
will be backed by an {@link EnumMap}.

<p>The iteration order of the returned map follows the enum's iteration order, not the order in
which the elements appear in the given map.

@param map the map to make an immutable copy of
@return an immutable map containing those entries
@since 14.0
Returns an immutable map instance containing the given entries . Internally the returned map will be backed by an { @link EnumMap } .