Java泛型。如何正确扩展扩展泛型抽象参数类型类的参数类型类
我有一个泛型抽象超类GenericModel,其方法我希望在子类中调用,如下所示:Java泛型。如何正确扩展扩展泛型抽象参数类型类的参数类型类,java,generics,inheritance,Java,Generics,Inheritance,我有一个泛型抽象超类GenericModel,其方法我希望在子类中调用,如下所示: public abstract class GenericModel<T extends GenericModel> { @Transient protected Class<T> entityClass; public GenericModel() { Class obtainedClass = getClass(); Type genericSuperc
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 Liability extends Insurance {
}
List<Liability> currentUserInsurances = new Liability().getByCreationUser_Id(1L);
public class Insurance<T> extends GenericModel<Insurance<T>> {}
public class Liability extends Insurance<Liability> {}
以及责任的对象
I类调用方法:
getByCreationUser_Id()
我想得到list
而不是T的列表,如下所示:
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 Liability extends Insurance {
}
List<Liability> currentUserInsurances = new Liability().getByCreationUser_Id(1L);
public class Insurance<T> extends GenericModel<Insurance<T>> {}
public class Liability extends Insurance<Liability> {}
List currentUserInsurances=new Liability().getByCreationUser_Id(1L);
不幸的是,我遇到了一个错误:
类型不匹配:无法从列表转换为列表
当我在保险类上调用相同的方法时,我得到一个:
列表
我已经尝试按如下方式声明类:
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 Liability extends Insurance {
}
List<Liability> currentUserInsurances = new Liability().getByCreationUser_Id(1L);
public class Insurance<T> extends GenericModel<Insurance<T>> {}
public class Liability extends Insurance<Liability> {}
公共类保险扩展了GenericModel{}
公共类责任扩展保险{}
但身份证不起作用。出现编译错误
请帮助。您需要将您的
保险
类别声明为
public class Insurance<T extends Insurance> extends GenericModel<T> {}
public class Liability extends Insurance<Liability> {}
您需要将您的
保险
类别声明为
public class Insurance<T extends Insurance> extends GenericModel<T> {}
public class Liability extends Insurance<Liability> {}
您需要将您的
保险
类别声明为
public class Insurance<T extends Insurance> extends GenericModel<T> {}
public class Liability extends Insurance<Liability> {}
您需要将您的
保险
类别声明为
public class Insurance<T extends Insurance> extends GenericModel<T> {}
public class Liability extends Insurance<Liability> {}
你已经得到了一个很好的答案,我只是想提示你可能想要避免原始类型,所以将你的类声明为GenericModel。你已经得到了一个很好的答案,我只是想提示你可能想要避免原始类型,所以将你的类声明为GenericModel。你已经得到了一个很好的答案,我只是想提示你可能想要避免原始类型,因此,将您的类声明为GenericModel。您已经得到了一个很好的答案,我只是想提示您可能希望避免原始类型,所以将您的类声明为GenericModel。如何初始化此类的java对象?好的,但是我得到了一个错误:
原因:org.hibernate.InstantiationException:无法从JPA实例化测试对象myInsurance.models.Insurance
。你能帮我吗?我想这和hibernate框架有关。我不擅长。但它与泛型无关。您可以使用异常跟踪和相关代码提出新问题。一定要在上面标记hibernate。我已经添加了新帖子。您能告诉我是否可以使用jpa持久化将您的答案中的结构/类声明存储在db中吗?它与jpa无关-只是genericSuperclass\uuuu.getActualTypeArguments()[0]
将立即为保险返回类型变量
,而不是预期的类
。我在你的第二个问题中发布了解决方案。如何初始化这个类的java对象?好的,但我得到一个错误:,原因是:org.hibernate.InstantiationException:无法从JPA实例化测试对象MyInsurance.models.Insurance
。你能帮我吗?我想这和hibernate框架有关。我不擅长。但它与泛型无关。您可以使用异常跟踪和相关代码提出新问题。一定要在上面标记hibernate。我已经添加了新帖子。您能告诉我是否可以使用jpa持久化将您的答案中的结构/类声明存储在db中吗?它与jpa无关-只是genericSuperclass\uuuu.getActualTypeArguments()[0]
将立即为保险返回类型变量
,而不是预期的类
。我在你的第二个问题中发布了解决方案。如何初始化这个类的java对象?好的,但我得到一个错误:,原因是:org.hibernate.InstantiationException:无法从JPA实例化测试对象MyInsurance.models.Insurance
。你能帮我吗?我想这和hibernate框架有关。我不擅长。但它与泛型无关。您可以使用异常跟踪和相关代码提出新问题。一定要在上面标记hibernate。我已经添加了新帖子。您能告诉我是否可以使用jpa持久化将您的答案中的结构/类声明存储在db中吗?它与jpa无关-只是genericSuperclass\uuuu.getActualTypeArguments()[0]
将立即为保险返回类型变量
,而不是预期的类
。我在你的第二个问题中发布了解决方案。如何初始化这个类的java对象?好的,但我得到一个错误:,原因是:org.hibernate.InstantiationException:无法从JPA实例化测试对象MyInsurance.models.Insurance
。你能帮我吗?我想这和hibernate框架有关。我不擅长。但它与泛型无关。您可以使用异常跟踪和相关代码提出新问题。一定要在上面标记hibernate。我已经添加了新帖子。您能告诉我是否可以使用jpa持久化将您的答案中的结构/类声明存储在db中吗?它与jpa无关-只是genericSuperclass\uuuu.getActualTypeArguments()[0]
将立即为保险返回类型变量
,而不是预期的类
。我在你的第二个问题中发布了解决方案。