1、得泛型类实例真正类型
import java.lang.reflect.ParameterizedType; public class T1<T> { private Class classt; public T1() { ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); this.classt = (Class) type.getActualTypeArguments()[0]; System.out.println(this.classt); } }
public class User(){
}
public class T2 extends T1<User> { public static void main(String[] args) { T2 t = new T2 (); } }
2、得泛型方法泛型参数真正类型
import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.Date; import java.util.List; public class GenericalReflection { private List<Date> dates = new ArrayList<Date>(); public void setDates(List<Date> dates) { this.dates = dates; } public static void main(String[] args) { final Method[] methods = GenericalReflection.class.getMethods(); for (final Method m : methods) { if (m.getName().equals("setDates")) { //拿到方法的第一个参数的泛型对象,因为这个方法只有一个参数. //这就是面向对象编程,所有的一切都是对象。 final ParameterizedType pType = (ParameterizedType) m.getGenericParameterTypes()[0]; //拿到这个参数原始类型名称 System.out.println(((Class<?>) pType.getRawType()).getName()); //拿到这个参数的泛型的名称 System.out.println(((Class<?>) pType.getActualTypeArguments()[0]).getName()); } } } }