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 }