为什么我的双层地图不起作用?

时间:2014-02-06 21:56:13

标签: java dictionary generics type-erasure

我有这段代码:

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);

为什么这不是合法代码?

1 个答案:

答案 0 :(得分:2)

?并不代表“任何类型”,而是“未知类型”。因此,向该地图添加任何内容是不合法的,因为您不知道哪些类型合法添加。如果您希望能够添加任何内容,则类型参数为Object