Java Generics Map键值键入

时间:2015-05-24 23:13:09

标签: java generics collections

我想要一个返回类似

的方法
Map<Class<T>, List<T>>

其中地图的键对应于该类的实例列表,但地图可以包含许多不同类型的类。有没有办法强制键和键的输入必须对应,同时允许所有不同的类型存储在地图中?

1 个答案:

答案 0 :(得分:-2)

public class ClassInstancesMap {

    private Map<Class<?>, List<?>> map;

    public ClassInstancesMap() {
        map = new HashMap<>();
    }

    public <T> void put(Class<T> key, List<T> list) {
        for (T e : list)
            if (key != e.getClass())
                throw new IllegalArgumentException(
                    "Type not match key=" + key
                    + " element=" + e
                    + "(class=" + e.getClass() + ")");
        map.put(key, list);
    }

    @SuppressWarnings("unchecked")
    public <T> List<T> get(Class<T> key) {
        return (List<T>)map.get(key);
    }

    @Override
    public String toString() {
        return map.toString();
    }
}

以下示例是可编译的,但它会引发运行时异常。 因此,此地图强制键入和值的输入必须对应

ClassInstanesMap map = new ClassInstancesMap();
map.put(Object.class, Arrays.asList(1, 2));
相关问题