1.获取运行时类的父类及父类的泛型
public class refletTest {
@Test
public void test2(){
Class clazz = Person.class;
Class superclass = clazz.getSuperclass();
System.out.println(superclass);
}
@Test
public void test3(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
System.out.println(genericSuperclass);
}
@Test
public void test4(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
//如果 genericSuperclass 确定是带泛型的父类,强转为参数类型 ParameterizedType 方便调用后续的方法
//paramType 泛型参数
ParameterizedType paramType = (ParameterizedType) genericSuperclass;
//paramType.getActualTypeArguments() 获取实际类型参数/获取泛型类型
Type[] actualTypeArguments = paramType.getActualTypeArguments();
//因为是数组,如果只有一个泛型参数就按 index=0 来获取
// System.out.println(actualTypeArguments[0].getTypeName());//java.uitl.String
System.out.println(((Class)actualTypeArguments[0]).getName());
}
}
2.获取运行时类的接口、所在包、注解
public class Test {
@Test
public void test5(){
Class clazz = Person.class;
Class[] interfaces = clazz.getInterfaces();
for(Class c : interfaces){
System.out.println(c);
}
System.out.println("++++++++++++++++++++++");
//获取运行时类的父类实现的接口
Class[] interfaces1 = clazz.getSuperclass().getInterfaces();
for(Class c : interfaces1){
System.out.println(c);
}
}
@Test
public void test6(){
Class clazz = Person.class;
Package pack = clazz.getPackage();
System.out.println(pack);
}
@Test
public void test7(){
Class clazz = Person.class;
Annotation[] annotations = clazz.getAnnotations();
for(Annotation annos : annotations){
System.out.println(annos);
}
}
}
反射-获取运行时类的结构



