我有这段代码:
import java.util.*;
public class StorageCenter {
protected HashMap<Class<?>,HashMap<String,?>> storage;
public <T> void put(Class<T> c,String key, T value){
if(!storage.containsKey(c)){
storage.put(c, new HashMap<String,T>());
}
storage.get(c).put(key, value);
}
@SuppressWarnings("unchecked")
public<T> T get(Class<T> c,String key){
return (T) storage.get(c).get(key);
}
}
我希望这些方法可以工作,允许我有一个“双”哈希映射,其中第一层是Class对象,第二层是该类型对象的HashMap。
但是这段代码不起作用,当我尝试使用它时出现编译错误:
storage.get(c).put(key, value);
为什么这不是合法代码?
答案 0 :(得分:2)
?
并不代表“任何类型”,而是“未知类型”。因此,向该地图添加任何内容是不合法的,因为您不知道哪些类型合法添加。如果您希望能够添加任何内容,则类型参数为Object
。