下面的代码将介绍如何利用ParameterizedType获取java泛型参数类型,进而通过反射获取java类。
//超类
package test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@SuppressWarnings("unchecked")
public class Person<T> {
private Class<T> clazz;
public Person() {
// 使用反射技术得到T的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型
this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型
System.out.println("clazz ---> " + clazz);
}
}
//子类
package test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Student extends Person<Student> {
}
//测试类
package test;
public class TestGetClass {
/**
* @param args
*/
public static void main(String[] args) {
Student student = new Student();
}
}
显示效果
对反射的理解一步步深入,更多的实践和学习促进成长!