java - 泛型类型转换?

标签 java generics abstract-factory

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

相关文章:

c# - 结果类型协变 - 方法返回接口(interface)类型和特定类型的泛型类

design-patterns - 为什么需要抽象工厂设计模式?

design-patterns - 使用抽象工厂的缺点以及解决它的模式

java - 如何仅在 TreeTableView 中按叶子排序?

java - 为什么通过Apache FTPClient上传的文件比本地的原始文件小?

c# - 通用字典中的 TKey 和 TValue 是什么?

java - 我已经捕获了声明并捕获了异常,但仍然存在错误

java - 关于java方法调用

objective-c - Objective-C 中是否存在强类型集合?