错误原型:
Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
源代码:
public class Parent<T> {
}
public class Children<T> extends Parent<T> {
private Class<T> type;
public Class<T> getType() {
// 通过反射获取泛型的类型
Type actualTypeArgument = ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
return (Class<T>) actualTypeArgument;
}
public static void main(String[] args) {
Children<String> children = new Children<>();
Class<String> type = children.getType(); // 调用该方法时出现上述错误
System.out.println(type.getName());
}
}
错误原因:因为泛型擦除,所以只能拿到T拿不到具体类型,这种场景想拿到必须有个子类具体指定了T的类型,比如改成这样就能拿到了:
Children<String> children = new Children<String>(){};