java反射之获取类的信息方法(推荐)
更新时间:2017年06月05日 08:11:00 投稿:jingxian
下面小编就为大家带来一篇java反射之获取类的信息方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文接上文“老生常谈反射之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反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot Jackson日期格式化统一配置的实现
Spring项目中经常需要配置日期时间格式格式,本文主要介绍了SpringBoot Jackson日期格式化统一配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-08-08spring mvc中@PathVariable / 带斜杠方式获取
这篇文章主要介绍了spring mvc中@PathVariable / 带斜杠方式获取,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08Spring Boot报错:No session repository could be auto-configured
这篇文章主要给大家介绍了关于Spring Boot报错:No session repository could be auto-configured, check your configuration的解决方法,文中给出了详细的解决方法,对遇到这个问题的朋友们具有一定参考价值,需要的朋友下面来一起看看吧。2017-07-07基于Java反射的map自动装配JavaBean工具类设计示例代码
这篇文章主要给大家介绍了关于基于Java反射的map自动装配JavaBean工具类设计的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起看看吧2018-10-10
最新评论