具有通用和内部 classes 的模型 class 的继承

Inheritance of model class with generic and inner classes

我想实现继承层次结构: GenericInsurance 扩展,其中包含内部(非静态)class HouseInsurance

要扩展的通用 class

public abstract class Generic<T extends Generic> {
    public Generic() {
       entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
    }
}

Class 扩展泛型并嵌套 class 扩展外部(封闭)class Insurance

public class Insurance extends Generic<Insurance> {
   public class HouseInsurance extends Insurance {
   }
}

不幸的是,当我尝试创建内部 class 的实例时,出现错误:

ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

我想我应该添加到内部 class 声明参数类型。但是我不知道怎么做。

通用 class 由许多其他 class 扩展,并且有效。这是第一个inner继承class,所以我觉得有问题

请帮忙。 到目前为止,我只收到编译错误。

我不确定当您创建 HouseInsurance class 的实例时 class 应该 entityClass 指代哪个?所以给出两种解决方案:

如果 entityClass 应该指向 HouseInsurance class 而不是使用此代码:

public Generic() {
    Type genericType = getClass().getGenericSuperclass();
    if (genericType instanceof ParameterizedType) {
        entityClass = ((Class) ((Class) ((ParameterizedType) genericType).getActualTypeArguments()[0]));
    }
    else {
        entityClass = getClass().getSuperclass();
    }
}

如果 entityClass 应该指向 Insurance class 而不是使用它:

public Generic() {
    Class cClass = getClass();
    do {
        Type genericType = cClass.getGenericSuperclass();

        if (genericType instanceof ParameterizedType) {
            entityClass = ((Class) ((Class) ((ParameterizedType) genericType).getActualTypeArguments()[0]));
        }
        else {
            cClass = cClass.getSuperclass();
        }
    } while (entityClass == null);
}

对于所有这些类型的场景,请查看 TypeTools

public Generic() {
    entityClass = TypeResolver.resolveRawClass(Generic.class, getClass());
}