在抽象工厂模式中,我使用泛型。 我有 BaseEntity 接口(interface),它扩展了 Serialized,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
当我像这样进行类型转换时
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 接口(interface)扩展为可序列化。
最佳答案
重新定义你的工厂方法:
public abstract <T extends BaseEntity> Map<String, T> getJavaObj(Long id);
然后您无需强制转换即可获得正确的类型:
Map<String, Employee> emp = getJavaObj(empId);
关于java - 泛型类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13813847/