在看反射順便做個筆記,目前知道的反射的Object都是要有對象的也就是實體Bean。
referance: Java反射簡易教程
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的屬性和值代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:
Java反射簡易教程
Java反射機制實例代碼分享
關於Java反射機制你需要知道的事情
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!