在抽象工厂模式中,我使用泛型。 我有BaseEntity接口,它扩展了Serializable,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);
它会发出此警告
类型安全:从
Map<String,capture#1-of ? extends Serializable>
取消选中投票 地图 类型安全:从Map<String,capture#1-of ? extends BaseEntity>
取消选中 图
有没有办法避免类型转换或解决警告甚至在类型转换后?由于我返回的对象确实通过BaseEntity接口扩展到Serializable。
答案 0 :(得分:2)
重新定义您的工厂方法:
public abstract <T extends BaseEntity> Map<String, T> getJavaObj(Long id);
然后你可以在没有演员的情况下获得正确的类型:
Map<String, Employee> emp = getJavaObj(empId);