获取运行时类的父类:
public class FieldTest {
@Test
public void test1(){
Class clazz=Person.class;
Class superclass = clazz.getSuperclass();//class test.Creature
System.out.println(superclass);//class test.Creature
}
}
又因为:Person类声明为
@MyAnnotation(value = "hi")
public class Person extends Creature<String> implements Comparable<String>,MyInterface{
private String name;
int age;
所以可以去获取Person类父类的泛型
获取运行时类带泛型的父类
@Test
public void test1(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();//Type是接口
System.out.println(genericSuperclass);//test.Creature<java.lang.String>
}
获取运行时类的带泛型的父类的泛型
@Test
public void test1(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();//Type是接口
ParameterizedType parameterizedType= (ParameterizedType) genericSuperclass;//进行强转
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();//获取实际上的类型参数,就是获取泛型类型
//因为只有一个泛型,所以数组的长度为1,就可以不用遍历了,直接把0索引进行输出
System.out.println(actualTypeArguments[0]);//class java.lang.String
//如果我们不想在输出结果中出现class
//方法一
System.out.println(actualTypeArguments[0].getTypeName());//java.lang.String
//方法二
//actualTypeArguments[0]没有getName操作,但Class有,而Class实现了Type,所以可以进行强转(actualTypeArguments[0]本质上也就是Class)
System.out.println(((Class)actualTypeArguments[0]).getName());//java.lang.String
}