gpt4 book ai didi

java - 类无法转换为 ParameterizedType

转载 作者:行者123 更新时间:2023-12-01 13:20:50 26 4
gpt4 key购买 nike

public class FrontUtil<T> {

public List<Map<String, String>> tableGen(List<Map<String, String>> theads, List<T> tbodys){


List<Map<String, String>> frontList = null;

for (T t : tbodys) {
*Class<T> clazz =(Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];*
for (Map<String, String> title : theads) {
try {
Field field = clazz.getDeclaredField(title.get("columnClass"));
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();
String content = getMethod.invoke(t).toString();
Map<String, String> temp = new HashMap<String, String>(0);
temp.put(title.get("columnName"), content);
frontList.add(temp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

return frontList;
}
}

堆栈:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
*****FrontUtil.tableGen(FrontUtil.java:19)
*****action.MaterialFactoryAction.list(MaterialFactoryAction.java:78)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

我想获得 T 的实际类别

Class<T> clazz =(Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

但它无法工作。任何建议将不胜感激,谢谢。

最佳答案

答案是:你不能。因为type erasure该信息在运行时不再存在。

在创建 FrontUtil 实例时传入 Class 参数。

private Class<T> clazz;
public FrontUtil(Class<T> clazz) {
this.clazz = clazz;
}

然后在需要的地方使用该 Class 对象。

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

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