有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java泛型类型转换?

在抽象工厂模式中,我使用泛型。 我有一个扩展Serializable的BaseEntity接口,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);

它给出了这个警告

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接口扩展到了Serializable


共 (1) 个答案

  1. # 1 楼答案

    重新定义工厂方法:

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

    然后,无需强制转换即可获得正确的类型:

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