在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>对象?

最佳答案

public <T> ModelBin<T> getModelBin(Class<T> type) {
    return (ModelBin<T>) entities.get(type);
}


这是以类型安全的方式执行此操作的普遍接受的方法。

final ModelBin<String> myStrBin = getModelBin(String.class);


将正确编译。


  这个函数会返回一个ModelBin对象吗?


对编译器来说,这看起来是正确的,是的。在运行时,返回的ModelBin没有类型(由于擦除),但这只是Java设计的方式。

08-27 09:34