在Java中是否有一种方法可以使用映射,其中值的类型参数与键的类型参数相关联?我想写的内容如下:
public class Foo { // This declaration won't compile - what should it be? private static Map, T> defaultValues; // These two methods are just fine public static void setDefaultValue(Class clazz, T value) { defaultValues.put(clazz, value); } public static T getDefaultValue(Class clazz) { return defaultValues.get(clazz); } }
也就是说,只要值的类型与Class对象的类型匹配,我就可以对Class对象存储任何默认值.我不明白为什么不允许这样做,因为我可以确保在设置/获取类型正确的值时.
编辑:感谢cletus的回答.我实际上并不需要地图本身的类型参数,因为我可以确保获取/设置值的方法的一致性,即使它意味着使用一些稍微丑陋的演员表.
你不是试图实现Joshua Bloch的类型安全的异构容器模式吗?基本上:
public class Favorites { private Map, Object> favorites = new HashMap , Object>(); public void setFavorite(Class klass, T thing) { favorites.put(klass, thing); } public T getFavorite(Class klass) { return klass.cast(favorites.get(klass)); } public static void main(String[] args) { Favorites f = new Favorites(); f.setFavorite(String.class, "Java"); f.setFavorite(Integer.class, 0xcafebabe); String s = f.getFavorite(String.class); int i = f.getFavorite(Integer.class); } }
来自Effective Java(第2版)和本演示文稿.