java中的泛型返回类型返回对象

时间:2014-09-27 21:37:54

标签: java generics reflection

我有一个方法,旨在允许我的SDK的使用者从内部存储中提取对象。这些对象继承自作为泛型类的基类。对象的真实类型是确定性的,并且只有消费者才知道。设置如下:

public class MyBaseClass<T> {
    ...
}

public class TheBaseClassContainer {
    private Map<String, MyBaseClass> container;

    public <T extends MyBaseClass> T getOne(String id, Class<T> clazz) {
        return clazz.cast(this.container.get(id));
    }
}

这个想法是消费者可以简单地指定他们期待的课程,我们将处理剩下的课程。不幸的是,当我这样称呼这个方法时:

TheBaseClassContainer container = ...;
MyBaseClassSubclass subclass = container.getOne("myId", MyBaseClassSubclass.class);

我得到编译失败,说容器.getOne返回类型MyBaseClass,并且赋值期望一个MyBaseClassSubclass类型的对象。为什么会这样?

1 个答案:

答案 0 :(得分:0)

为我工作的伙伴:

    class MyBaseClass<T> {
}

class B extends  MyBaseClass<Integer>{}

class TheBaseClassContainer {
    private Map<String, MyBaseClass> container;

    public <T extends MyBaseClass> T getOne(String id, Class<T> clazz) {
        return clazz.cast(this.container.get(id));
    }
}

用法:

    TheBaseClassContainer theBaseClassContainer = new TheBaseClassContainer();
    B asd = theBaseClassContainer.getOne("asd", B.class);

在Java 7中编译。