【发布时间】:2015-07-22 08:11:40
【问题描述】:
我有通用抽象超类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>
当我在 Insurance 类上调用相同的方法时,它会起作用,我得到:
List<Insurance>
我已经尝试过如下声明类:
public class Insurance<T> extends GenericModel<Insurance<T>> {}
public class Liability extends Insurance<Liability> {}
但是 id 不起作用。出现编译错误。
请帮忙。
【问题讨论】:
-
你已经得到了一个很好的答案,我只是想暗示你可能想要避免使用原始类型,所以将你的类声明为 GenericModel
>。
标签: java generics inheritance