通过java反射机制进行vo、po值的传递

近期在项目中有多个vo需要进行vo、po值的转换,之前都是在vo里写个方法,进行值传递,但是这次涉及的vo较多,属性值较多,如果要对每个vo都写个传值方法,显然是费时又费力的。正好想到了之前在网上看到了运用反射机制的值传递操作,便想到了用反射机制来实现vo和po传值。

大体思路是通过反射来获取所有字段的值、getter、setter方法,然后用invoke方法调用setter方法,将vo的值一个一个的set到po里

代码如下:

private void setValueVoToPo(Object obj, UserBean bean) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        // 获取实体类的所有属性,返回Field数组
        Field[] field = obj.getClass().getDeclaredFields();
        // 获取属性的名字
        for (int i = 0; i < field.length; i++){
            // 获取属性的名字
            String name = field[i].getName();
            // 获取属性类型
            String type = field[i].getGenericType().toString();
            name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());
            Method fieldMothod = obj.getClass().getMethod("get" + name);
            //下面是将相同类型的数据,根据getter、setter方法进行值传递
            if (type.equals("class java.lang.String")){
                Method m = bean.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,String.class); // 如果type是类类型,则前面包含"class ",后面跟类名
                m.invoke(bean,fieldMothod.invoke(obj));
            }
            if (type.equals("class java.lang.Integer")){
                Method m = obj.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,Integer.class);
                m.invoke(bean,fieldMothod.invoke(obj));
            }
            if (type.equals("class java.lang.Short")){
                Method  m = obj.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,Short.class);
                m.invoke(bean,fieldMothod.invoke(obj));
            }
            if (type.equals("class java.lang.Double")){
                Method  m = obj.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,Double.class);
                m.invoke(bean,fieldMothod.invoke(obj));
            }
            if (type.equals("class java.lang.Boolean")){
                Method  m = obj.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,Boolean.class);
                m.invoke(bean,fieldMothod.invoke(obj));
            }
            if (type.equals("class java.util.Date")) {
                Method  m = obj.getClass().getMethod("get" + name);
                m = bean.getClass().getMethod("set"+name,Date.class);
                m.invoke(bean,fieldMothod.invoke(obj));
            }
        }
    }

之后如果再有vo传值给po的操作,就只需要调用这个方法就可以了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值