在Map属性声明中约束子类型

时间:2017-06-08 09:36:53

标签: java templates dictionary generics

有没有办法以这样的方式声明Map属性,以便根据键的类来约束映射到某个键的值的类型?

我需要一个将WrapperA键与WrapperB值相关联的Map,其中两个类都使用扩展Contained类的类型进行参数化。

class WrapperA<T extends Contained>
class WrapperB<T extends Contained>
Map<WrapperA, WrapperB> map;

但是,我想强制执行地图上的条目以使用相同的类进行参数化。请注意,地图可以使用不同类型托管条目。例如,WrapperA<Description> - &gt; WrapperB<Description>WrapperA<Name> - &gt; WrapperB<Name>,假设描述和名称扩展为包含。

简而言之,我怎样才能以类似下面的类的方式声明Map?

class Store {

    HashMap<WrapperA<? extends Contained>, WrapperB<? extends Contained>> map = new HashMap<>();

    public <T extends Contained> void put(WrapperA<T> w, WrapperB<T> rs) {
        map.put(w, rs);
    }

    public <T extends Contained> WrapperB<T> get(WrapperA<T> w) {
        return (WrapperB<T>) map.get(w);
    }
}

0 个答案:

没有答案