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

2025-05-29 0 74

本文接上文“老生常谈反射之Class的使用(必看篇)”,以编写一个用来获取的信息(成员函数、成员变量、构造函数)的工具来讲解"反射之获取的信息"

1、获取成员函数信息

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
/**

* 获取成员函数信息

* @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、获取成员变量信息

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
/**

* 获取成员变量信息

* @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、获取构造函数信息

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
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、工具代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94
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反射之获取的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java反射之获取类的信息方法(推荐) https://www.kuaiidc.com/115933.html

相关文章

发表评论
暂无评论