EnumMap factory 본문

Programming/Java

EnumMap factory

halatha 2011. 4. 25. 23:35
import java.util.Map;
import java.util.EnumMap;
import java.util.EnumSet;
import com.google.common.collect.Maps;
//import javax.annotation.Nullable;

//	$ javac -cp .:./Guava/guava-r09/guava-r09.jar TestEnumMap.java
//	$ java -cp .:./Guava/guava-r09/guava-r09.jar TestEnumMap
public class TestEnumMap
{
	public static void main(String[] args)
	{
		EnumMap<CHS, Integer>	m1	=	EnumMapFactory.newEnumMap(CHS.class);
		m1.put(CHS.A, 1);
		m1.put(CHS.B, 2);
		EnumMap<CHS, Integer>	m2	=	m1.clone();
		m2.put(CHS.C, 1);
		m2.put(CHS.C, 2);
		EnumMap<CHS, Integer>	m3	=	EnumMapFactory.<CHS, Integer>newEnumMap(CHS.class);
		m3.put(CHS.C, 3);
		EnumMap<CHS, Integer>	m4	=	Maps.<CHS, Integer>newEnumMap(CHS.class);
		m4.put(CHS.A, 1);
		EnumMap<CHS, Long>	m5	=	EnumMapFactory.<CHS, Long>newEnumMap(CHS.class);
		m5.put(CHS.A, 1L);
		System.out.println(m1 + "\n" + m2 + "\n" + m3 + "\n" + m4 + "\n" + m5);

	}
}

//	http://code.google.com/p/guava-libraries/downloads/detail?name=guava-concurrent-slides.pdf&can=2&q=
class EnumMapFactory<K, V>
{
	public static <T> T checkNotNull(T reference) {
		if (reference == null) {
			throw new NullPointerException();
		}
		return reference;
	}

	public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(
			Class<K> type) {
		return new EnumMap<K, V>(checkNotNull(type));
	}

	public static <K extends Enum<K>, V> EnumMap<K,V>  newEnumMap(
			Class<K> type,
			//@Nullable V defaultValue) {
			V defaultValue) {
		return newEnumMap(type, EnumSet.allOf(type), defaultValue);
	}

	public static <K extends Enum<K>, V> EnumMap<K,V>  newEnumMap(
			Class<K> type, Iterable<? extends K> keys,
			//@Nullable V defaultValue) {
			V defaultValue) {
		EnumMap<K, V> map = newEnumMap(type);
		setValues(map, EnumSet.allOf(type), defaultValue);
		return map;
	}
	public static <K, V> void setValues(
		Map<? super K, ? super V> map, Iterable<? extends K> keys,
		//@Nullable V value) {
		V value) {
		checkNotNull(map);
		checkNotNull(keys);
		for (K key: keys) {
			map.put(key, value);
		}
	}
}

enum CHS { A, B, C }
Comments