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

回到顶部