Java映射,其值受键的type参数限制
在Java中,有没有一种方法可以将值的类型参数与键的类型参数绑定在一起?我要写的是如下内容:
public class Foo { // This declaration won't compile - what should it be?
private static Map<Class<T>, T> defaultValues;
// These two methods are just fine
public static <T> void setDefaultValue(Class<T> clazz, T value) {
defaultValues.put(clazz, value);
}
public static <T> T getDefaultValue(Class<T> clazz) {
return defaultValues.get(clazz);
}
}
也就是说,我可以针对Class对象存储任何默认值,只要该值的类型与Class对象的类型匹配即可。我不明白为什么不应该这样做,因为我可以确保在设置/获取值时类型正确。
编辑:感谢克莱特斯的回答。我实际上不需要映射本身上的类型参数,因为我可以确保获取/设置值的方法的一致性,即使这意味着使用一些稍微难看的强制转换也是如此。
回答:
你不是要实现Joshua Bloch的类型安全的异构容器模式吗?基本上:
public class Favorites { private Map<Class<?>, Object> favorites =
new HashMap<Class<?>, Object>();
public <T> void setFavorite(Class<T> klass, T thing) {
favorites.put(klass, thing);
}
public <T> T getFavorite(Class<T> 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);
}
}
以上是 Java映射,其值受键的type参数限制 的全部内容, 来源链接: utcz.com/qa/412037.html