【发布时间】:2021-04-20 05:40:21
【问题描述】:
我有一种方法返回Class<? extends Animal>
public Class<? extends Animal> getAnimal(Animal animal)
{
//....
}
在参数passGenericAnimal(D animal); 中接受泛型的另一种方法
我想从 getAnimal() 方法中获取 Animal 类类型,我只想通过将其转换为泛型类型来传递给 passGenericAnimal() 方法。
像这样:
public Class<? extends Animal> getAnimal()
{
return Lion.class;
}
public <T extends Animal> void convertToGenericsAndAssign()
{
T animal = getAnimal();
//getting error here
//Type mismatch: cannot convert from Class<capture#15-of ? extends Animal> to T
passString(animal);
}
public void passGenericAnimal(D animal)
{
//....;
}
有什么方法可以将 Class 类型转换为 Generics 类型?
【问题讨论】:
-
什么是
D?你在passString做什么?你能更详细地解释一下吗?我认为我们需要更多地了解您对类对象所做的事情才能回答您的问题。 -
实际上,
? extends可以是任何东西,我的意思是它可以是我创建的自定义类。例如。 An Animal 是 All animals 的父类,我可以说Class <? extends Animal>,不是吗? -
修改了我的问题,希望能帮助你理解场景。
-
你必须强制转换
(T),但是没有办法让这个类型安全。您对?类型一无所知,尤其是当它与通用T匹配时。如果类型匹配,它将编译并工作,如果不匹配,它将在运行时崩溃。也就是说,你正在混合不同的东西。你说你有Class<...>,然后想要T而不是Class<T>,这是两个不同的东西。Class<Lion>不是Lion。