Java:在给定类对象的情况下强制转换泛型类

时间:2017-08-28 21:57:41

标签: java casting

是否可以将泛型类的类型转换为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>对象吗?

2 个答案:

答案 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类型擦除