是否可以将泛型类的类型转换为java中的给定Class对象?像这样:
public ModelBin<?> getModelBin(Class type) {
return (ModelBin<type>) entities.get(type);
}
编译器告诉我它无法将类型解析为类型。我知道我可以这样做,
public ModelBin<?> getModelBin(Class type) {
return entities.get(type);
}
它会工作,但后来我必须在程序中将每个模型从模型箱中投出 - 这是更多的工作。
我做了一些阅读并最终得到了这个:
public <T> ModelBin<T> getModelBin(Class<T> type) {
return (ModelBin<T>) entities.get(type);
}
这会让函数返回一个ModelBin<type>
对象吗?
答案 0 :(得分:1)
public <T> ModelBin<T> getModelBin(Class<T> type) {
return (ModelBin<T>) entities.get(type);
}
这是以类型安全的方式执行此操作的普遍接受的方式。
final ModelBin<String> myStrBin = getModelBin(String.class);
将正确编译。
这会让函数返回一个ModelBin对象吗?
这对编译器来说是正确的,是的。在运行时,返回的ModelBin
不会有类型(由于擦除),但这只是Java的设计方式。
答案 1 :(得分:0)
不,这是不可能的,原因是Type Erasure。在您的代码中,它决定使用运行时值来转换到哪个类,因为当时不能使用Type Erasure类型参数(仅编译)。
另类example类型擦除