15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的③其他
Person等代码见“15-5 反射 ---- 获取运行时类的完整结构(1)概述”
1.构造器
2.父类
3.带泛型的父类
4.父类的泛型
5.接口
6.所在的包
7.注解
代码:
package java3;
import java2.Person;
import org.junit.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class OtherTest {
//获取构造器结构:
@Test
public void test1(){
Class clazz = Person.class;
//方式一:getConstructors():获取当前运行时类中声明为public得构造器
Constructor[] constructors = clazz.getConstructors();
for(Constructor c : constructors){
System.out.println(c);
}
System.out.println();
//方式二:getDeclaredConstructors():获取当前运行时类中所有的构造器
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
for(Constructor c : declaredConstructors){
System.out.println(c);
}
}
//获取运行时类的父类
@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);
}
//获取运行时类中父类的泛型
//代码:逻辑性代码 vs 功能性代码
@Test
public void test4(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) genericSuperclass;
//获取泛型类型
Type[] actualTypeArguments = paramType.getActualTypeArguments();
// System.out.println(actualTypeArguments[0].getTypeName());
System.out.println(((Class)actualTypeArguments[0]).getTypeName());
}
//获取运行时类接口
@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);
}
}
}
test1输出:
public java2.Person()
java2.Person(java.lang.String,int)
private java2.Person(java.lang.String)
public java2.Person()
test2输出:
class java2.Creature
test3输出:
java2.Creature<java.lang.String>
test4输出:
java.lang.String
test5输出:
interface java.lang.Comparable
interface java2.MyInterface
interface java.io.Serializable
test6输出:
package java2
test7输出:
@java2.MyAnnotation(value=hi)