有 Java 编程相关的问题?

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

Java泛型。如何正确扩展扩展泛型抽象参数类型类的参数类型类

我有一个泛型抽象超类GenericModel,我想在儿童类中调用它,如下所示:

public abstract class GenericModel<T extends GenericModel> {
    @Transient protected Class<T> entityClass;
    public GenericModel() {
    Class obtainedClass = getClass();
    Type genericSuperclass = null;
    for(;;) {
        genericSuperclass = obtainedClass.getGenericSuperclass();
        if(genericSuperclass instanceof ParameterizedType) {
            break;
        }
        obtainedClass = obtainedClass.getSuperclass();
    }
    ParameterizedType genericSuperclass_ = (ParameterizedType) genericSuperclass;
    entityClass = ((Class) ((Class) genericSuperclass_.getActualTypeArguments()[0]));

    // some code

    public List<T> getByCreationUser_Id(Long id) {
        // method body
        return entities;
    }
}

我将通过以下方式扩展本课程:

public class Insurance extends GenericModel<Insurance> {
     // some code
}

我想用这个类扩展类:Insurance,如下所示:

public class Liability extends Insurance {

}

Liability类的对象,我想调用方法: getByCreationUser_Id()而不是T的列表,我想得到List<Liability>如下:

List<Liability> currentUserInsurances = new Liability().getByCreationUser_Id(1L);

不幸的是,我遇到了一个错误:

Type mismatch: cannot convert from List<Insurance> to List<Liability>

当我在保险类上调用同样的方法时,我得到一个: List<Insurance>

我已经尝试过如下方式声明类:

public class Insurance<T> extends GenericModel<Insurance<T>> {}
public class Liability extends Insurance<Liability> {}

但身份证不起作用。出现编译错误

请帮忙


共 (1) 个答案

  1. # 1 楼答案

    您需要将Insurance类声明为

    public class Insurance<T extends Insurance> extends GenericModel<T> {}
    

    然后,你的Liability

    public class Liability extends Insurance<Liability> {}