本文共 1464 字,大约阅读时间需要 4 分钟。
获取运行时类的父类:
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 Creatureimplements Comparable ,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}
获取运行时类的带泛型的父类的泛型
@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 }
转载地址:http://gsoai.baihongyu.com/