泛型类之间的类似java子类的关系

时间:2015-08-10 15:23:14

标签: java generics

我有一个名为A的接口,它扩展了另一个接口B

我有这段代码:

class myMap<T extends B> {
    private Map<PluginTypes, T> map;

    public myMap() {
        map = new HashMap<PluginTypes, T>();
        map.put(PluginTypes.ICustomPublishingNeedsService,
                A.class);
    }

}

我在put函数中遇到了这个编译器错误:

The method put(PluginTypes, T) in the type Map<PluginTypes,T> is not applicable for the arguments (PluginTypes, Class<A>)

记录

我已经尝试过这个

private Map<PluginTypes, Class<T>> map2;

    public myMap(int i) {
        map2 = new HashMap<PluginTypes, Class<T>>();
        map2.put(PluginTypes.ICustomPublishingNeedsService,
                (Class<T>) ICustomPublishingNeeds.class);
    }

它正在工作,但它不安全,我宁愿你更愿意帮助我在第一段代码中解决我的错误

1 个答案:

答案 0 :(得分:0)

这是因为Class不扩展A或B

myMap<T extends B>表示此参数的类型将是B类型(或其子类之一)。你传递的是ClassClass不会延长B.