gpt4 book ai didi

值受键的类型参数限制的 Java 映射

转载 作者:IT老高 更新时间:2023-10-28 20:53:35 24 4
gpt4 key购买 nike

Java 中有没有一种方法可以将值的类型参数绑定(bind)到键的类型参数的映射?我想写的是这样的:

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 对象存储任何默认值。我不明白为什么不允许这样做,因为我可以确保在设置/获取值时类型是正确的。

编辑:感谢 cletus 的回答。我实际上并不需要 map 本身的类型参数,因为我可以确保获取/设置值的方法的一致性,即使这意味着使用一些稍微难看的强制转换。

最佳答案

您不是在尝试实现 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);
}
}

来自 Effective Java (2nd edition)this presentation .

关于值受键的类型参数限制的 Java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/416540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com