java反射之获取类的信息方法(推荐)
程序员文章站
2023-12-19 13:23:52
本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"
1、获取成员函数...
本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"
1、获取成员函数信息
/** * 获取成员函数信息 * @param obj */ public static void printclassmethodmessage(object obj){ //获取类的信息 获取类的类类型 class c = obj.getclass(); //获取类的名称 system.out.println("类的名称是:" + c.getname()); /** * methods类,方法对象 * 一个成员方法就是一个method对象 * getmethods()方法是获取所有public的函数,包括父类继承而来 * getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限 */ // method [] ms = c.getmethods(); method [] ms = c.getdeclaredmethods(); for (method m : ms) { //得到方法返回值的类类型 class returntype = m.getreturntype(); system.out.print(returntype.getname() + " "); //得到方法名称 system.out.print(m.getname() + "("); //获取参数类型(得到的是参数列表的类型的类类型) class[] paramtypes = m.getparametertypes(); for (class paramtype : paramtypes) { system.out.print(paramtype.getname()+","); } system.out.println(")"); } }
2、获取成员变量信息
/** * 获取成员变量信息 * @param obj */ public static void printclassfieldmessage(object obj) { class c = obj.getclass(); /** * 成员变量也是对象 * field类封装了关于成员变量的操作 * getfields()获取的是所有的public的成员变量信息 * getdeclaredfields()获取的是该类自己声明的成员变量信息 */ // field [] fs = c.getfields(); field[] fs = c.getdeclaredfields(); for (field f : fs) { //得到成员变量的类型的类类型 class fieldtype = f.gettype(); string typename = fieldtype.getname(); //得到成员变量的名称 string fieldname = f.getname(); system.out.println(typename+" "+fieldname); } }
3、获取构造函数信息
public static void printconmessage(object obj){ class c = obj.getclass(); /** * 构造函数也是对象 * java.lang.constructor封装了构造函数的信息 * getconstructors()获取所有的public构造函数 * getdeclaredconstructors()获取所有的构造函数 */ // constructor[] cs = c.getconstructors(); constructor[] cs = c.getdeclaredconstructors(); for (constructor constructor : cs) { system.out.print(constructor.getname()+"("); //获取构造函数的参数列表,得到的是参数列表的类类型 class[] paramtypes = constructor.getparametertypes(); for (class paramtype : paramtypes) { system.out.print(paramtype.getname()+","); } system.out.println(")"); } }
4、工具类代码
package com.format.util; import java.lang.reflect.constructor; import java.lang.reflect.field; import java.lang.reflect.method; /** * 打印类的信息,成员函数、成员变量 * created by format on 2017/6/3. */ public class classutil { /** * 获取成员函数信息 * @param obj */ public static void printclassmethodmessage(object obj){ //获取类的信息 获取类的类类型 class c = obj.getclass(); //获取类的名称 system.out.println("类的名称是:" + c.getname()); /** * methods类,方法对象 * 一个成员方法就是一个method对象 * getmethods()方法是获取所有public的函数,包括父类继承而来 * getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限 */ // method [] ms = c.getmethods(); method [] ms = c.getdeclaredmethods(); for (method m : ms) { //得到方法返回值的类类型 class returntype = m.getreturntype(); system.out.print(returntype.getname() + " "); //得到方法名称 system.out.print(m.getname() + "("); //获取参数类型(得到的是参数列表的类型的类类型) class[] paramtypes = m.getparametertypes(); for (class paramtype : paramtypes) { system.out.print(paramtype.getname()+","); } system.out.println(")"); } } /** * 获取成员变量信息 * @param obj */ public static void printclassfieldmessage(object obj) { class c = obj.getclass(); /** * 成员变量也是对象 * field类封装了关于成员变量的操作 * getfields()获取的是所有的public的成员变量信息 * getdeclaredfields()获取的是该类自己声明的成员变量信息 */ // field [] fs = c.getfields(); field[] fs = c.getdeclaredfields(); for (field f : fs) { //得到成员变量的类型的类类型 class fieldtype = f.gettype(); string typename = fieldtype.getname(); //得到成员变量的名称 string fieldname = f.getname(); system.out.println(typename+" "+fieldname); } } /** * 获取构造函数信息 * @param obj */ public static void printconmessage(object obj){ class c = obj.getclass(); /** * 构造函数也是对象 * java.lang.constructor封装了构造函数的信息 * getconstructors()获取所有的public构造函数 * getdeclaredconstructors()获取所有的构造函数 */ // constructor[] cs = c.getconstructors(); constructor[] cs = c.getdeclaredconstructors(); for (constructor constructor : cs) { system.out.print(constructor.getname()+"("); //获取构造函数的参数列表,得到的是参数列表的类类型 class[] paramtypes = constructor.getparametertypes(); for (class paramtype : paramtypes) { system.out.print(paramtype.getname()+","); } system.out.println(")"); } } }
以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。