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];
但它不起作用。任何建议都将不胜感激,谢谢。
答案 0 :(得分:1)
答案是:你做不到。由于type erasure该信息在运行时不再存在。
在创建Class
实例时传入FrontUtil
参数。
private Class<T> clazz;
public FrontUtil(Class<T> clazz) {
this.clazz = clazz;
}
然后在任何需要的地方使用Class
对象。