All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.common.collect.EnumHashBiMap Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

There is a newer version: 34.0.0.Final
Show newest version
/*
 * Copyright (C) 2007 The Guava Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.common.collect;

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.CheckForNull;
import org.checkerframework.checker.nullness.qual.Nullable;

/**
 * A {@code BiMap} backed by an {@code EnumMap} instance for keys-to-values, and a {@code HashMap}
 * instance for values-to-keys. Null keys are not permitted, but null values are. An {@code
 * EnumHashBiMap} and its inverse are both serializable.
 *
 * 

See the Guava User Guide article on {@code BiMap}. * * @author Mike Bostock * @since 2.0 */ @GwtCompatible(emulated = true) @J2ktIncompatible @ElementTypesAreNonnullByDefault public final class EnumHashBiMap, V extends @Nullable Object> extends AbstractBiMap { transient Class keyTypeOrObjectUnderJ2cl; /** * Returns a new, empty {@code EnumHashBiMap} using the specified key type. * * @param keyType the key type */ public static , V extends @Nullable Object> EnumHashBiMap create( Class keyType) { return new EnumHashBiMap<>(keyType); } /** * 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 */ public static , V extends @Nullable Object> EnumHashBiMap create( Map map) { EnumHashBiMap bimap = create(EnumBiMap.inferKeyTypeOrObjectUnderJ2cl(map)); bimap.putAll(map); return bimap; } private EnumHashBiMap(Class keyType) { super(new EnumMap(keyType), new HashMap()); // TODO: cpovirk - Pre-size the HashMap based on the number of enum values? this.keyTypeOrObjectUnderJ2cl = keyType; } // Overriding these 3 methods to show that values may be null (but not keys) @Override K checkKey(K key) { return checkNotNull(key); } @CanIgnoreReturnValue @Override @SuppressWarnings("RedundantOverride") // b/192446478: RedundantOverride ignores some annotations. // TODO(b/192446998): Remove this override after tools understand nullness better. @CheckForNull public V put(K key, @ParametricNullness V value) { return super.put(key, value); } @CanIgnoreReturnValue @Override @SuppressWarnings("RedundantOverride") // b/192446478: RedundantOverride ignores some annotations. // TODO(b/192446998): Remove this override after tools understand nullness better. @CheckForNull public V forcePut(K key, @ParametricNullness V value) { return super.forcePut(key, value); } /** Returns the associated key type. */ @GwtIncompatible public Class keyType() { return keyTypeOrObjectUnderJ2cl; } /** * @serialData the key class, number of entries, first key, first value, second key, second value, * and so on. */ @GwtIncompatible // java.io.ObjectOutputStream private void writeObject(ObjectOutputStream stream) throws IOException { stream.defaultWriteObject(); stream.writeObject(keyTypeOrObjectUnderJ2cl); Serialization.writeMap(this, stream); } @SuppressWarnings("unchecked") // reading field populated by writeObject @GwtIncompatible // java.io.ObjectInputStream private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); keyTypeOrObjectUnderJ2cl = (Class) stream.readObject(); /* * TODO: cpovirk - Pre-size the HashMap based on the number of enum values? (But *not* based on * the number of entries in the map, as that makes it easy for hostile inputs to trigger lots of * allocation—not that any program should be deserializing hostile inputs to begin with!) */ setDelegates(new EnumMap(keyTypeOrObjectUnderJ2cl), new HashMap()); Serialization.populateMap(this, stream); } @GwtIncompatible // only needed in emulated source. private static final long serialVersionUID = 0; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy