2

在抽象工厂模式中,我使用的是泛型。我有扩展 Serializable 的 BaseEntity 接口,Employee 类实现了 BaseEntity。在抽象类中,我有这个 getJavaObj 方法

getJavaObj()是一个接受 aLong empId并返回 a的方法Map<String, ? extends BaseEntity>

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

使用泛型我试图在它提供的主类中做到这一点;

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

它给出了这个错误类型安全:Unchecked cast from Map<String,capture#1-of ? extends BaseEntity>to Map

当我像这样进行类型转换时

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

它给出了这个警告

类型安全:未经检查的Map<String,capture#1-of ? extends Serializable>转换为 Map 类型安全:未经检查的Map<String,capture#1-of ? extends BaseEntity>转换为 Map

即使在类型转换之后,有没有办法避免类型转换或解决警告?由于我返回的对象确实通过 BaseEntity 接口扩展到 Serializable 。

4

1 回答 1

2

重新定义您的工厂方法:

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

然后你可以在没有强制转换的情况下获得正确的类型:

Map<String, Employee> emp = getJavaObj(empId);
于 2012-12-11T04:59:16.700 回答