java反射 获取参数类型_java反射之获取类的信息方法(推荐)

本文详细介绍了如何使用Java反射获取类的成员函数、成员变量和构造函数信息。通过`Class`对象的`getMethods()`、`getDeclaredMethods()`、`getFields()`、`getDeclaredFields()`和`getConstructors()`、`getDeclaredConstructors()`等方法,可以获取类的公共及私有成员。文章提供了一个工具类`ClassUtil`,展示了具体实现过程。
摘要由CSDN通过智能技术生成

本文接上文“老生常谈反射之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反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值