簡體   English   中英

Java泛型。 如何正確擴展擴展通用抽象參數類型的類的參數類型的類

[英]Java Generics. How to properly extend parameter typed class that extends Generic abstract parameter typed class

我有一個泛型抽象超類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() ,而不是TI列表,而是要獲得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> {}

但是id不起作用。 發生編譯錯誤。

請幫忙。

您需要聲明您的Insurance等級為,

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

然后,您的Liability類別為

public class Liability extends Insurance<Liability> {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM