java反射获取方法参数名及类型详解

时间:2023-05-15

java反射获取方法参数名及类型详解

packagecom.mysec.reflex;
importjava.lang.reflect.Constructor;
importjava.lang.reflect.Field;
importjava.lang.reflect.Method;
//通过反射获取办法信息
publicclassgetMethodUtil{
publicstaticvoidmain(String[]args){
Stringstring=”hell”;
//printClassMethodMessage(string);
//printFieldMessage(string);
printConMessage(string);
}
//publicstaticvoidmain(String[]args){
//Class>c1=int.class;
//Class>c2=String.class;
//Class>c3=double.class;
//Class>c4=Double.class;
//Class>c5=void.class;
//System.out.println(c1.getName());
//System.out.println(c2.getName());
//System.out.println(c2.getSimpleName());//不带包名的称号
//}
/**
*打印类的信息,包含类的成员函数、成员变量(只获取成员函数)
*
*@paramobject
*该目标所属类的信息
*/
publicstaticvoidprintClassMethodMessage(Objectobject){//该类所属的信息
//要获取类的信息,首先要获取类的类类型
Class>class1=object.getClass();//传递的是哪个子类的目标,class1便是该子类的类类型
//获取类的称号
System.out.println(“类的称号是:”+class1.getName());
/**
*Method类,办法目标一个成员办法便是一个Method目标getMehtod()办法
*获取的是一切得public的函数,包含父类继承的getDeclaredMethods()获取的是一切该类声明的办法,不同访问权限
*/
Method[]ms=class1.getMethods();
for(inti=0;i<ms.length;i++){
//得到办法的返回值类型的类类型
Class>returnType=ms[i].getReturnType();
System.out.print(returnType.getName()+””);
//得到办法的称号
System.out.print(ms[i].getName()+”(“);
//获取参数类型
Class[]paramTypes=ms[i].getParameterTypes();
for(Classclass2:paramTypes){
System.out.print(class2.getName()+”,”);
}
System.out.println(“)”);
printFieldMessage(class1);
}
}
/**
*获取成员变量信息
*
*@paramobject
*/
privatestaticvoidprintFieldMessage(Objectobject){
//要获取类的信息,首先要获取类的类类型
Class>class1=object.getClass();//传递的是哪个子类的目标,class1便是该子类的类类型
//获取类的称号
System.out.println(“类的称号是:”+class1.getName());
/**
*成员变量也是目标java.lang.reflect.FieldField类封装了关于成员变量的操作
*getFields()办法获取的是一切的public的成员变量的信息
*getDeclaredFields获取的是该类自己声明的成员变量的信息
*/
//Field[]fs=class1.getFields();
Field[]fs=class1.getDeclaredFields();
for(Fieldfield:fs){
//得到成员变量的类型的类类型
Class>filedType=field.getType();
StringtypeName=filedType.getName();
StringfieldName=field.getName();
System.out.println(typeName+””+fieldName);
}
}
/**
*打印目标的结构函数的信息
*
*@paramobject
*/
publicstaticvoidprintConMessage(Objectobject){
Class>class1=object.getClass();
/**
*结构函数也是目标java.lang.Constructor中封装了结构函数的信息
*getConstructors获取一切的public的结构函数getDeclaredConstructors得到一切的结构函数
*/
//Constructor[]cs=class1.getConstructors();
Constructor[]cs=class1.getDeclaredConstructors();
for(Constructorconstructor:cs){
System.out.print(constructor.getName()+”(“);
//获取结构函数的参数列表—>得到的是参数列表的类类型
Class[]paramTypes=constructor.getParameterTypes();
for(Classclass2:paramTypes){
System.out.print(class2.getName()+”,”);
}
System.out.println(“)”);
}
}
}

文章标签:

Copyright © 2016 广州思洋文化传播有限公司,保留所有权利。 粤ICP备09033321号

与项目经理交流
扫描二维码
与项目经理交流
扫描二维码
与项目经理交流
ciya68