我想实现该继承层次结构:
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
我想我应该添加内部类声明参数类型。但是我不知道怎么做。
泛型类由许多其他类扩展而且有效。这是内部类的第一次继承,所以我认为存在问题。
请帮忙。 到目前为止,我只收到编译错误。
答案 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);
}