java 类反射2_泛型

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;

import org.junit.Test;

public class ReflectDecompose {
//解剖普通方法
@Test
public void fetchMethods() throws Exception{
Class<?> c=Class.forName("cn.hncu.reflect.fetch.User");
Method ms[]=c.getMethods(); //获取当前类及其父类的所有public方法
//Method ms[]=c.getDeclaredMethods();//只是获取当前类自己定义的所有方法(包括private及其它权限)
for(int i=0;i<ms.length;i++){
Method m=ms[i];
System.out.println("name: "+m.getName()); //方法名
//System.out.println("annotation: "+ m.getAnnotations() );
System.out.println("ReturnType: "+ m.getReturnType() ); //方法返回值类型
//该方法对象m 是在哪个类中声明的
System.out.println("DeclaringClass:"+ m.getDeclaringClass());

/*获取泛型*/
Type type=m.getGenericReturnType();//返回类型中的泛型--Class
System.out.println(type);
//m.getExceptionTypes(); //异常中的泛型--Class[]
//m.getGenericParameterTypes(); //参数中的泛型 ---Class[]


//解剖出参数类型
Class<?> paramTypes[]=m.getParameterTypes();
for(Class<?> clazz:paramTypes){
System.out.println("param>> "+clazz);
}

//解剖出异常类型
Class<?> exs[] = m.getExceptionTypes();
for(int j=1;j<=exs.length;j++){
System.out.println("Execption"+j+":: "+ exs[j-1]);
}


//解剖出修饰符
int mod=m.getModifiers();
System.out.println("modifiers1:"+mod);
System.out.println("modifiers2:"+ Modifier.toString(mod));

System.out.println("///");
}
}


@Test
public void fetchConstructors() throws Exception{
Class<?> clazz=Class.forName("cn.hncu.reflect.fetch.User");
//Constructor cons[] = clazz.getConstructors(); //获取当前类及其父类的所有public构造器
Constructor<?> cons[]=clazz.getDeclaredConstructors();//只是获取当前类自己定义的所有构造器(包括private及其它权限)
for(int i=0;i<cons.length;i++){
Constructor<?> con = cons[i];
System.out.println("name: "+ con.getName() ); //构造器的名字
//System.out.println("annotation: "+ con.getAnnotations() );


/*获取泛型
con.getExceptionTypes(); //异常中的泛型--Class[]
con.getGenericParameterTypes(); //参数中的泛型 ---Class[]
*/

//解剖出参数类型
Class<?> paramTypes[]=con.getParameterTypes();
for(Class<?> c:paramTypes){
System.out.println("param>> "+c);
}

//解剖出异常类型
Class<?> exs[] = con.getExceptionTypes();
for(int j=1;j<=exs.length;j++){
System.out.println("Execption"+j+":: "+ exs[j-1]);
}

System.out.println("DeclaringClass:"+ con.getDeclaringClass());

//解剖出修饰符
int mod = con.getModifiers();
System.out.println("modifiers1:"+mod);
System.out.println("modifiers2:"+ Modifier.toString(mod));
System.out.println("--------------------");
}
}

//解剖属性变量
@Test
public void fetchFields() throws Exception{
Class<?> cls = Class.forName("cn.hncu.reflect.fetch.User");
//Field flds[] = cls.getFields(); //获取当前类及其父类的所有public属性
Field flds[] = cls.getDeclaredFields(); //只是获取当前类自己定义的所有属性(包括private及其它权限)
for(int i=0;i<flds.length;i++){
Field fld = flds[i];
System.out.println("name: "+fld.getName());
System.out.println("DeclaringClass: "+fld.getDeclaringClass());
System.out.println("type: "+ fld.getType());

//解剖出修饰符
int mod = fld.getModifiers();
//System.out.println("modifiers1:"+mod);
System.out.println("modifiers2:"+ Modifier.toString(mod));
System.out.println("-----------------");
}

}
}