您的位置:首页 > 编程语言 > Java开发

java反射获取方法名称,参数类型

2017-07-02 16:54 776 查看
package com.mysec.reflex;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

//通过反射获取方法信息
public class getMethodUtil {

public static void main(String[] args) {
String string = "hell";
// printClassMethodMessage(string);
// printFieldMessage(string);
printConMessage(string);
}

// public static void main(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());//不带包名的名称
// }

/**
* 打印类的信息,包括类的成员函数、成员变量(只获取成员函数)
*
* @param object
* 该对象所属类的信息
*/
public static void printClassMethodMessage(Object object) {// 该类所属 的信息
// 要获取类的信息,首先要获取类的类类型
Class<?> class1 = object.getClass();// 传递的是哪个子类的对象,class1就是该子类的类类型
// 获取类的名称
System.out.println("类的名称是:" + class1.getName());
/**
* Method类,方法对象 一个成员方法就是一个Method对象 getMehtod()方法
* 获取的是所有得public的函数,包括父类继承的 getDeclaredMethods()获取的是所有该类声明的方法,不同访问权限
*/
Method[] ms = class1.getMethods();
for (int i = 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 (Class class2 : paramTypes) {
System.out.print(class2.getName() + ",");
}
System.out.println(")");

printFieldMessage(class1);
}
}

/**
* 获取成员变量信息
*
* @param object
*/
private static void printFieldMessage(Object object) {
// 要获取类的信息,首先要获取类的类类型
Class<?> class1 = object.getClass();// 传递的是哪个子类的对象,class1就是该子类的类类型
// 获取类的名称
System.out.println("类的名称是:" + class1.getName());
/**
* 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作
* getFields()方法获取的是所有的public的成员变量的信息
* getDeclaredFields获取的是该类自己声明的成员变量的信息
*/
// Field[] fs = class1.getFields();
Field[] fs = class1.getDeclaredFields();
for (Field field : fs) {
// 得到成员变量的类型的类类型
Class<?> filedType = field.getType();
String typeName = filedType.getName();
String fieldName = field.getName();
System.out.println(typeName + " " + fieldName);
}
}

/**
* 打印对象的构造函数的信息
*
* @param object
*/
public static void printConMessage(Object object) {
Class<?> class1 = object.getClass();
/**
* 构造函数也是对象 java.lang.Constructor中封装了构造函数的信息
* getConstructors获取所有的public的构造函数 getDeclaredConstructors得到所有的构造函数
*/
// Constructor[] cs = class1.getConstructors();
Constructor[] cs = class1.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName() + "(");
// 获取构造函数的参数列表--->得到的是参数列表的类类型
Class[] paramTypes = constructor.getParameterTypes();
for (Class class2 : paramTypes) {
System.out.print(class2.getName() + ",");
}
System.out.println(")");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: