gpt4 book ai didi

java - 嵌套类无法转换为 java.lang.reflect.ParameterizedType

转载 作者:行者123 更新时间:2023-12-01 18:14:55 25 4
gpt4 key购买 nike

我正在尝试实现这样的模型结构:

Generic (abstract)
TplInsurance (extends Generic)
TplInsuranceDoctor (nested class in TplInsurance extends TplInsurance)

不幸的是,当我尝试创建 TplInsuranceDoctor 对象时,我遇到运行时错误,它是嵌套类:

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

该错误指向通用构造函数:

public Generic() {
entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
}

以下是模型类:

public abstract class Generic<T extends Generic> {
protected Class<T> entityClass;
public Generic() {
entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
}
public Long id;
}
<小时/>
public class TplInsurance extends GenericDictionary<TplInsurance> {

public class TplInsuranceDoctor extends TplInsurance {
public final String color = "success";
public final String title = "lekarza i dentysty";
}

这是我创建对象的方式:

TplInsuranceDoctor tDoctor = new TplInsurance().new TplInsuranceDoctor();
<小时/>

我明白我应该以某种方式参数化嵌套类TplInsuranceDoctor的类型,但我不知道如何做。我尝试过的一切都编译失败。请帮忙

最佳答案

如果您对 TplInsuranceDoctor 调用 getGenericSuperclass(),则会失败,因为它的父类(super class)是 TplInsurance,它不是参数化类型。您必须更进一步才能到达Generic。例如,您可以这样做:

public Generic() {
Class class1 = getClass();
Type genericSuperclass = null;
for(;;) {
genericSuperclass = class1.getGenericSuperclass();
if(genericSuperclass instanceof ParameterizedType)
break;
class1 = class1.getSuperclass();
}
ParameterizedType genericSuperclass_ = (ParameterizedType) genericSuperclass;
entityClass = ((Class) ((Class) genericSuperclass_.getActualTypeArguments()[0]));
}

此外,如果您删除所有与问题无关的 JPA/Hibernate 内容(注释...),您的问题会更清晰。

关于java - 嵌套类无法转换为 java.lang.reflect.ParameterizedType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com