• java遍历实体类的属性和数据类型以及属性值


    遍历实体类的树形和数据类型一级属性值

        /**
         * 遍历实体类的属性和数据类型以及属性值
         * @param model
         * @throws NoSuchMethodException
         * @throws IllegalAccessException
         * @throws IllegalArgumentException
         * @throws InvocationTargetException
         */
        public static void reflectTest(Object model) throws NoSuchMethodException,
                        IllegalAccessException, IllegalArgumentException,
                        InvocationTargetException {
            // 获取实体类的所有属性,返回Field数组
            Field[] field = model.getClass().getDeclaredFields();
            // 遍历所有属性
            for (int j = 0; j < field.length; j++) {
                    // 获取属性的名字
                    String name = field[j].getName();
                    // 将属性的首字符大写,方便构造get,set方法
                    name = name.substring(0, 1).toUpperCase() + name.substring(1);
                    // 获取属性的类型
                    String type = field[j].getGenericType().toString();
                    // 如果type是类类型,则前面包含"class ",后面跟类名
                    System.out.println("属性为:" + name);
                    if (type.equals("class java.lang.String")) {
                            Method m = model.getClass().getMethod("get" + name);
                            // 调用getter方法获取属性值
                            String value = (String) m.invoke(model);
                            System.out.println("数据类型为:String");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
                    if (type.equals("class java.lang.Integer")) {
                            Method m = model.getClass().getMethod("get" + name);
                            Integer value = (Integer) m.invoke(model);
                            System.out.println("数据类型为:Integer");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
                    if (type.equals("class java.lang.Short")) {
                            Method m = model.getClass().getMethod("get" + name);
                            Short value = (Short) m.invoke(model);
                            System.out.println("数据类型为:Short");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
                    if (type.equals("class java.lang.Double")) {
                            Method m = model.getClass().getMethod("get" + name);
                            Double value = (Double) m.invoke(model);
                            System.out.println("数据类型为:Double");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
                    if (type.equals("class java.lang.Boolean")) {
                            Method m = model.getClass().getMethod("get" + name);
                            Boolean value = (Boolean) m.invoke(model);
                            System.out.println("数据类型为:Boolean");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
                    if (type.equals("class java.util.Date")) {
                            Method m = model.getClass().getMethod("get" + name);
                            Date value = (Date) m.invoke(model);
                            System.out.println("数据类型为:Date");
                            if (value != null) {
                                    System.out.println("属性值为:" + value);
                            } else {
                                    System.out.println("属性值为:空");
                            }
                    }
            }
        }

    由于我的实体bean里有double类型,我又不想用其封装类的方法获取值,于是我在他的基础上又加入了一段代码,

                    if (type.equals("double")) {
                        Method m = model.getClass().getMethod("get" + name);
                        double value = (double) m.invoke(model);
                        System.out.println("数据类型为:double");
                        if (value >0) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                    }
                    System.out.println("属性类型为:"+type);

    这样一来,就可以知道属性类型是什么,可以很好的加判断语句了。当然原文代码还有很多值得优化的地方,我这里就没有进行优化,准备等我将它与poi导出整合之后再来优化。

    使用invoke方式调用实体对象的getter和setter方法

    //拼装setter方法
    Method m1 = hr.getClass().getMethod("setDay"+day,Double.class);
    //拼装getter方法
    Method m2 = hr.getClass().getMethod("getDay"+day);
    //调用getter方法
    Double da =  (Double) m2.invoke(hr);
    //调用setter方法
    m1.invoke(hr,da);  
  • 相关阅读:
    mysql数据库分区功能及实例详解
    Mysql线程池优化笔记
    mariadb multi-source replication(mariadb多主复制)
    mysql---二进制日志
    MySQL binlog_format (Mixed,Statement,Row)[转]
    如何生成唯一的server Id,server_id为何不能重复?
    mysql复制过程中的server-id的理解
    MySQL参数:innodb_flush_log_at_trx_commit 和 sync_binlog
    Mysql 用户和权限管理
    B+树索引和哈希索引的区别[转]
  • 原文地址:https://www.cnblogs.com/shuilangyizu/p/7686479.html
Copyright © 2020-2023  润新知