在看反射順便做個筆記,目前知道的反射的Object都是要有對象的也就是實體Bean。
referance:Java反射簡易教程
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 反射處理Bean,得到里面的屬性值 * * @author liulinsen * */ public class ReflexObjectUtil { /** * 單個對象的所有鍵值 * * @param object * 單個對象 * * @return Map<String, Object> map 所有 String鍵 Object值 ex:{pjzyfy=0.00, * xh=01, zzyl=0.00, mc=住院患者壓瘡發生率, pjypfy=0.00, rs=0, pjzyts=0.00, * czydm=0037, lx=921, zssl=0.00} */ public static Map<String, Object> getKeyAndValue(Object obj) { Map<String, Object> map = new HashMap<String, Object>(); // 得到類對象 Class userCla = (Class) obj.getClass(); /* 得到類中的所有屬性集合 */ Field[] fs = userCla.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { Field f = fs[i]; f.setAccessible(true); // 設置些屬性是可以訪問的 Object val = new Object(); try { val = f.get(obj); // 得到此屬性的值 map.put(f.getName(), val); // 設置鍵值 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } /* * String type = f.getType().toString();//得到此屬性的類型 if * (type.endsWith("String")) { * System.out.println(f.getType()+"\t是String"); f.set(obj,"12") ; * //給屬性設值 }else if(type.endsWith("int") || * type.endsWith("Integer")){ * System.out.println(f.getType()+"\t是int"); f.set(obj,12) ; //給屬性設值 * }else{ System.out.println(f.getType()+"\t"); } */ } System.out.println("單個對象的所有鍵值==反射==" + map.toString()); return map; } /** * 單個對象的某個鍵的值 * * @param object * 對象 * * @param key * 鍵 * * @return Object 鍵在對象中所對應得值 沒有查到時返回空字符串 */ public static Object getValueByKey(Object obj, String key) { // 得到類對象 Class userCla = (Class) obj.getClass(); /* 得到類中的所有屬性集合 */ Field[] fs = userCla.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { Field f = fs[i]; f.setAccessible(true); // 設置些屬性是可以訪問的 try { if (f.getName().endsWith(key)) { System.out.println("單個對象的某個鍵的值==反射==" + f.get(obj)); return f.get(obj); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } // 沒有查到時返回空字符串 return ""; } /** * 多個(列表)對象的所有鍵值 * * @param object * @return List<Map<String,Object>> 列表中所有對象的所有鍵值 ex:[{pjzyfy=0.00, xh=01, * zzyl=0.00, mc=住院患者壓瘡發生率, pjypfy=0.00, rs=0, pjzyts=0.00, * czydm=0037, lx=921, zssl=0.00}, {pjzyfy=0.00, xh=02, zzyl=0.00, * mc=新生兒產傷發生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=13, * zssl=0.00}, {pjzyfy=0.00, xh=03, zzyl=0.00, mc=陰道分娩產婦產傷發生率, * pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, * {pjzyfy=0.00, xh=04, zzyl=0.75, mc=輸血反應發生率, pjypfy=0.00, rs=0, * pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, {pjzyfy=5186.12, * xh=05, zzyl=0.00, mc=剖宮產率, pjypfy=1611.05, rs=13, pjzyts=7.15, * czydm=0037, lx=13, zssl=0.00}] */ public static List<Map<String, Object>> getKeysAndValues(List<Object> object) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (Object obj : object) { Class userCla; // 得到類對象 userCla = (Class) obj.getClass(); /* 得到類中的所有屬性集合 */ Field[] fs = userCla.getDeclaredFields(); Map<String, Object> listChild = new HashMap<String, Object>(); for (int i = 0; i < fs.length; i++) { Field f = fs[i]; f.setAccessible(true); // 設置些屬性是可以訪問的 Object val = new Object(); try { val = f.get(obj); // 得到此屬性的值 listChild.put(f.getName(), val); // 設置鍵值 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } list.add(listChild); // 將map加入到list集合中 } System.out.println("多個(列表)對象的所有鍵值====" + list.toString()); return list; } /** * 多個(列表)對象的某個鍵的值 * * @param object * @param key * @return List<Object> 鍵在列表中對應的所有值 ex:key為上面方法中的mc字段 那么返回的數據就是: [住院患者壓瘡發生率, * 新生兒產傷發生率, 陰道分娩產婦產傷發生率, 輸血反應發生率, 剖宮產率] */ public static List<Object> getValuesByKey(List<Object> object, String key) { List<Object> list = new ArrayList<Object>(); for (Object obj : object) { // 得到類對象 Class userCla = (Class) obj.getClass(); /* 得到類中的所有屬性集合 */ Field[] fs = userCla.getDeclaredFields(); for ( int i = 0 ; i < fs.length; i++) { Field f = fs[i]; f.setAccessible( true ); // 設置些屬性是可以訪問的 try { if (f.getName().endsWith(key)) { list.add(f.get(obj)); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } System.out.println( "多個(列表)對象的某個鍵的值列表====" + list.toString()); return list; } } |
調用:
List<Object> o=?Service.getAllList();
//java反射 解析測試
ReflexObjectUtil.getKeyAndValue(o.get(0));
ReflexObjectUtil.getValueByKey(o.get(0), "mc");
ReflexObjectUtil.getKeysAndValues(o);
ReflexObjectUtil.getValuesByKey(o, "mc");
總結
以上就是本文關于Java利用反射獲取object的屬性和值代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:https://www.cnblogs.com/Spirit612/p/6732008.html