java泛型类型转换?
在抽象工厂模式中,我使用泛型。 我有一个扩展Serializable的BaseEntity接口,Employee类实现了BaseEntity。 在抽象类中,我有一个getJavaObj方法
getJavaObj()
是一个方法,它接受一个Long empId
并返回一个Map<String, ? extends BaseEntity>
public abstract Map<String, ? extends BaseEntity> getJavaObj(Long id);
使用泛型,我试图在它提供的主类中做到这一点
Map<String, Employee> emp = getJavaObj(empId);
它提供了这种错误类型的安全性:未选中从Map<String,capture#1-of ? extends BaseEntity>
到映射的强制转换
当我像这样做类型铸造
Map<String, Employee> emp = (Map<String, Employee>)getJavaObj(empId);
它给出了这个警告
Type safety: Unchecked cast from
Map<String,capture#1-of ? extends Serializable>
to Map Type safety: Unchecked cast fromMap<String,capture#1-of ? extends BaseEntity>
to Map
是否有办法避免类型转换或解决即使在类型转换之后出现的警告因为我返回的对象确实通过BaseEntity接口扩展到了Serializable
# 1 楼答案
重新定义工厂方法:
然后,无需强制转换即可获得正确的类型: