类型安全的异构容器

来源:互联网 发布:mysql delete语句用法 编辑:程序博客网 时间:2024/06/06 04:12

类型安全的异构容器


Map并不能保证键和值之间的类型关系,即不能保证每个值的类型都与键的类型相同,当你考虑到这个问题时,可以尝试使用类型安全的异构容器。


package effective.xqh.generic;import java.util.HashMap;import java.util.Map;/** * 类型安全的异构容器(每个键都可以有一个不同的参数化类型) * (Map并不能保证键和值之间的类型关系,即不能保证每个值的类型都与键的类型相同) * @author Snway * */public class Favorites {private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();/** * 保证key和value之间的类型关系是一致的 * @param type key * @param instance value * @author Snway * @date 2012-7-6  */public <T> void putFavorites(Class<T> type, T instance) {if (type == null)throw new NullPointerException("Type is null");favorites.put(type, type.cast(instance));}public <T> T getFavorites(Class<T> type) {return type.cast(favorites.get(type));}/** * @param args * @author Snway * @date 2012-7-6  */public static void main(String[] args) {// TODO Auto-generated method stubFavorites favorites = new Favorites();favorites.putFavorites(String.class, "Effective Java");favorites.putFavorites(Integer.class, 30306);favorites.putFavorites(Class.class, Favorites.class);String[] strArr = {"J", "a", "v", "a"};favorites.putFavorites(String[].class, strArr); // 不能用在不可具体化的类型中,比如List<String>//favorites.putFavorites(String.class, "Hel, World"); // key必须不一样,否则会覆盖。String str = favorites.getFavorites(String.class);int favoriteInteger = favorites.getFavorites(Integer.class);Class<?> favoriteClass = favorites.getFavorites(Class.class);String[] arr = favorites.getFavorites(String[].class);for (String s : arr)System.out.print(s);System.out.println();System.out.printf("%s %d %s%n", str, favoriteInteger, favoriteClass);}}



原创粉丝点击