具有泛型和内部类的模型类的继承

时间:2015-05-15 11:28:52

标签: java generics model parameterized

我想实现该继承层次结构: Generic扩展为Insurance,其中包含内部(非静态)类HouseInsurance

要扩展的通用类

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

扩展泛型的类,并具有扩展Outer(封闭)类Insurance的嵌套类

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

不幸的是,当我尝试创建内部类的实例时,我收到错误:

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

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

泛型类由许多其他类扩展而且有效。这是内部类的第一次继承,所以我认为存在问题。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我不确定在创建HouseInsurance类的实例时哪个类应该entityClass引用?所以给出两种解决方案:

如果entityClass指向HouseInsurance类而不是使用此代码:

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

如果entityClass指向Insurance类而不是使用此代码:

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);
}