Java:在给定类对象的情况下强制转换泛型类
在java中,是否可以将泛型类的类型强制转换为给定的类对象?大概是这样的:Java:在给定类对象的情况下强制转换泛型类,java,casting,Java,Casting,在java中,是否可以将泛型类的类型强制转换为给定的类对象?大概是这样的: public ModelBin<?> getModelBin(Class type) { return (ModelBin<type>) entities.get(type); } publicmodelbin getModelBin(类类型){ 返回(ModelBin)实体。获取(类型); } 编译器告诉我它无法将类型解析为类型。我知道我可以这么做 public ModelBin&l
public ModelBin<?> getModelBin(Class type) {
return (ModelBin<type>) entities.get(type);
}
publicmodelbin getModelBin(类类型){
返回(ModelBin)实体。获取(类型);
}
编译器告诉我它无法将类型解析为类型。我知道我可以这么做
public ModelBin<?> getModelBin(Class type) {
return entities.get(type);
}
publicmodelbin getModelBin(类类型){
返回实体。获取(类型);
}
这是可行的,但随后我必须将每个模型从程序中的模型箱中抛出,这是更多的工作
我又读了一些书,最后得出以下结论:
public <T> ModelBin<T> getModelBin(Class<T> type) {
return (ModelBin<T>) entities.get(type);
}
publicmodelbin getModelBin(类类型){
返回(ModelBin)实体。获取(类型);
}
这会让函数返回一个
ModelBin
对象吗?否,这是不可能的,原因是。在您的代码中,它使用运行时值决定要强制转换到哪个类,因为类型擦除类型参数当时不可用(仅编译)
另一种类型为擦除public ModelBin getModelBin(类类型){
public <T> ModelBin<T> getModelBin(Class<T> type) {
return (ModelBin<T>) entities.get(type);
}
返回(ModelBin)实体。获取(类型);
}
这是以类型安全方式执行此操作的普遍接受的方法
final ModelBin<String> myStrBin = getModelBin(String.class);
final ModelBin myStrBin=getModelBin(String.class);
将正确编译
这会让函数返回ModelBin对象吗
这对编译器来说是正确的,是的。在运行时,返回的
ModelBin
不会有类型(由于擦除),但这正是Java的设计方式。实体是hashMap,没有任何类型安全的解决方案。您必须确保映射只能包含有效的映射。另外,使用Class
而不是原始Class
。使用类型擦除,这要困难得多,因为在运行时,您可能无法确保该类型是ModelBin的实例。此结构的目的是通过各种着色器对要在屏幕上渲染的各种实体进行排序-取决于类类型-因此我“知道”地图中将存储什么