如何利用反射获取字段的数据

来源:互联网 发布:软件管家官方下载安装 编辑:程序博客网 时间:2024/05/20 03:43

import java.lang.reflect.Field;  

1.       

2.     /** 

3.      *  

4.      * @author EX-QINCIDONG001 

5.      * 

6.      */  

7.     public class ReflectClass {  

8.       

9.         /** 

10.      * @param args 

11.      */  

12.     public static void main(String[] args) {  

13.         Person p = new Person();  

14.         p.setId(0);  

15.         p.setName("张三");  

16.         reflect(p);  

17.     }  

18.       

19.     public static void reflect(Object obj) {  

20.         if (obj == null) return;  

21.         Field[] fields = obj.getClass().getDeclaredFields();  

22.         for (int j = 0; j < fields.length; j++) {  

23.             fields[j].setAccessible(true);  

24.             // 字段名  

25.             System.out.print(fields[j].getName() + ",");  

26.             // 字段值  

27.             if (fields[j].getType().getName().[A1] equals(  

28.                     java.lang.String.class.getName())) {  

29.                 // String type  

30.                 try {  

31.                     System.out.print(fields[j].get(obj));  

32.                 } catch (IllegalArgumentException e) {  

33.                     // TODO Auto-generated catch block  

34.                     e.printStackTrace();  

35.                 } catch (IllegalAccessException e) {  

36.                     // TODO Auto-generated catch block  

37.                     e.printStackTrace();  

38.                 }  

39.             } else if (fields[j].getType().getName().equals(  

40.                     java.lang.Integer.class.getName())  

41.                     || fields[j].getType().getName().equals("int")) {  

42.                 // Integer type  

43.                 try {  

44.                     System.out.println(fields[j].getInt(obj));  

45.                 } catch (IllegalArgumentException e) {  

46.                     // TODO Auto-generated catch block  

47.                     e.printStackTrace();  

48.                 } catch (IllegalAccessException e) {  

49.                     // TODO Auto-generated catch block  

50.                     e.printStackTrace();  

51.                 }  

52.             }  

53.             // 其他类型。。。  

54.         }  

55.         System.out.println();  

56.     }  

57. }  

58.   

59. class Person {  

60.     private int id;  

61.     private String name;  

62.   

63.     public int getId() {  

64.         return this.id;  

65.     }  

66.   

67.     public void setId(int id) {  

68.         this.id = id;  

69.     }  

70.   

71.     public String getName() {  

72.         return this.name;  

73.     }  

74.   

75.     public void setName(String name) {  

76.         this.name = name;  

77.     }  

78.   

79. }  

 

结果:

id,0
name,张三

 


它是获取字段的类型名称如int

Double,string等

0 0