Class工具类-获取类/成员变量/构造函数

2020-09-25 490

public class ClassUtil { /** * @Author: www.itze.cn * @Date: 2020/9/17 16:08 * @Email: 814565718@qq.com * 打印类的信息,包括类的成员函数,变量 * @param object 该对象所属类的信息 */ public static void printClassMessage(Object object) { //获取类的信息,首先获取类的类类型 //参数传递的是什么类型的对象,objectClass就是什么类型 Class<?> objectClass = object.getClass(); //获取类的名称 System.out.println("类的名称:" + objectClass.getName()); /** * Method类 * 一个成员方法就是一个Method对象 * getMethods();获取的是所有public函数的对象,包括继承的父类的 * getDeclaredMethods();获取的是所有自己声明的方法,所有权限的 */ Method[] methods = objectClass.getMethods(); Method[] declaredMethods = objectClass.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { //得到返回值类型的类类型 Class<?> returnType = methods[i].getReturnType(); System.out.print("方法返回类型:" + returnType.getName() + " "); //得到方法名称 System.out.println("方法名称:"+methods[i].getName()+"()"); //获取参数类型---得到的是参数列表的类型的类类型[int.class,String.class] Class<?>[] parameterTypes = methods[i].getParameterTypes(); for (Class<?> param:parameterTypes ) { System.out.println("参数类型:"+param.getName()); } } /** * 成员变量也是对象 * java.lang.reflect.Field * Field封装了关于成员变量的操作 * getFields()获取的是所有public的成员变量信息 * getDeclaredFields获取的是该类自己声明的成员变量信息 */ Field[] declaredFields = objectClass.getDeclaredFields(); for (Field field : declaredFields ) { //得到成员变量的类型的类类型 Class<?> type = field.getType(); String typeName = type.getName(); //得到成员变量的名称 String fieldName = field.getName(); System.out.println("成员变量类型:" + typeName + " 成员变量值:" + fieldName); } } /** * 获取构造函数信息 * 调用方法类名.方法名 * @param object */ public static void printConMessage(Object object) { Class<?> objectClass = object.getClass(); /** * 构造函数也是对象 * java.lang.Constructor中封装了函数信息 * getDeclaredConstructors()获取自己生成的构造函数 */ Constructor<?>[] declaredConstructors = objectClass.getDeclaredConstructors(); for (Constructor con : declaredConstructors ) { System.out.print(con.getName() + "("); //获取构造函数的参数列表,得到的是参数列表的类类型 Class[] parameterTypes = con.getParameterTypes(); for (Class par : parameterTypes ) { System.out.print(par.getName() + ","); } System.out.println(")"); } } }
使用方法
public static void main(String[] args) { //任何类型的可以 String str = "hello"; ClassUtil.printClassMessage(str); }
15 14