zoukankan      html  css  js  c++  java
  • java反射获取Object的属性和值

    【整理】url:https://www.cnblogs.com/Spirit612/p/6732008.html
    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 = (Classobj.getClass();
            /* 得到类中的所有属性集合 */
            Field[] fs = userCla.getDeclaredFields();
            for (int i = 0; i < fs.lengthi++) {
                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();
                }
            }
            System.out.println("单个对象的所有键值==反射==" + map.toString());
            return map;
        }

        /**
         * 单个对象的某个键的值
         * @param object 对象
         * @param key键
         * @return Object 键在对象中所对应得值 没有查到时返回空字符串
         */
        public static Object getValueByKey(Object obj, String key) {
            // 得到类对象
            Class userCla = (Classobj.getClass();
            /* 得到类中的所有属性集合 */
            Field[] fs = userCla.getDeclaredFields();
            for (int i = 0; i < fs.lengthi++) {
                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 = (Classobj.getClass();
                /* 得到类中的所有属性集合 */
                Field[] fs = userCla.getDeclaredFields();
                Map<String, Object> listChild = new HashMap<String, Object>();
                for (int i = 0; i < fs.lengthi++) {
                    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 = (Classobj.getClass();
                /* 得到类中的所有属性集合 */
                Field[] fs = userCla.getDeclaredFields();
                for (int i = 0; i < fs.lengthi++) {
                    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");
  • 相关阅读:
    0529学习进度条
    0523-学习进度条
    0515-学习进度条
    实验三-进程模拟调度
    0501-学习进度条
    0424-学习进度条
    0422—操作系统作业调度
    0415-同学博客评价
    0414-复利计算再升级
    0409-学习进度条
  • 原文地址:https://www.cnblogs.com/shizi1987/p/12214302.html
Copyright © 2011-2022 走看看