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



我有一个方法,旨在允许我的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);

我收到一个编译失败消息,说container.getOne返回类型MyBaseClass,而赋值需要类型MyBaseClassSubclass的对象。为什么会发生这种情况?

适用于我的伴侣:

    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编译。

相关内容

  • 没有找到相关文章

最新更新