java返回对象中的泛型返回类型
我有一个方法,允许SDK的使用者从内部存储中提取对象。这些对象继承自泛型类的基类。对象的真实类型是确定性的,并且只有消费者知道。设置如下所示:java返回对象中的泛型返回类型,java,generics,reflection,Java,Generics,Reflection,我有一个方法,允许SDK的使用者从内部存储中提取对象。这些对象继承自泛型类的基类。对象的真实类型是确定性的,并且只有消费者知道。设置如下所示: public class MyBaseClass<T> { ... } public class TheBaseClassContainer { private Map<String, MyBaseClass> container; public <T extends MyBaseClass>
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));
}
}
我得到一个编译失败消息,说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));
}
}
用Java 7编译。给出准确的错误消息。请注意,
MyBaseClass
是通用的。您应该参数化它的使用。
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);