1. 程式人生 > >java反射獲取Object的屬性和值

java反射獲取Object的屬性和值

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; } }