泛型铸造?

时间:2012-12-11 04:51:46

标签: java generics abstract-factory

在抽象工厂模式中,我使用泛型。 我有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。

1 个答案:

答案 0 :(得分:2)

重新定义您的工厂方法:

public abstract <T extends BaseEntity> Map<String, T> getJavaObj(Long id);

然后你可以在没有演员的情况下获得正确的类型:

Map<String, Employee> emp = getJavaObj(empId);