android/guava/src/com/google/common/collect/EnumHashBiMap.java
public static <K extends Enum<K>, V> EnumHashBiMap<K, V> create(Map<K, ? extends V> map) {
    EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
    bimap.putAll(map);
    return bimap;
  }
public static <K extends Enum<K>, V> EnumHashBiMap<K, V> create(Map<K, ? extends V> map) {
    EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
    bimap.putAll(map);
    return bimap;
  }
Constructs a new bimap with the same mappings as the specified map. If the specified map is an
{@code EnumHashBiMap} or an {@link EnumBiMap}, the new bimap has the same key type as the input
bimap. Otherwise, the specified map must contain at least one mapping, in order to determine
the key type.

@param map the map whose mappings are to be placed in this map
@throws IllegalArgumentException if map is not an {@code EnumBiMap} or an {@code EnumHashBiMap}
instance and contains no mappings