加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java 通过反射复制父类字段属性、值到子类

(2017-01-12 15:24:51)
标签:

it

开发

反射

分类: 转载
有些时候需要建立子类继承于父类,尤其是java里面很多类是用mybatis generator生成的。通过父类构造子类,好像很麻烦,要逐个字段进行赋值


import java.beans.Statement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.util.DeserializeBeanInfo;
import com.alibaba.fastjson.util.FieldInfo;
import com.alibaba.fastjson.util.TypeUtils;

public class Copyer {

    public static  void Copy(B bo, S so) throws IllegalAccessException {

        try {
            Class bc = bo.getClass();
            if (bo == null || so == null) {
                return;
            }


            DeserializeBeanInfo deserializeBeanInfo = DeserializeBeanInfo.computeSetters(so.getClass(), (Type) so.getClass());
            List getters = TypeUtils.computeGetters(bo.getClass(), null);

            List setters = deserializeBeanInfo.getFieldList();
            Object v;
            FieldInfo getterfield;
            FieldInfo setterfidld;

            for (int j = 0; j < getters.size(); j++) {

                getterfield=getters.get(j);
                for (int i = 0; i < setters.size(); i++) {
                    setterfidld=setters.get(i);
//                    System.out.println(setterfidld.getName());
//                    System.out.println(getterfield.getName());

                    if (setterfidld.getName().compareTo(getterfield.getName()) == 0) {
                        v = getterfield.getMethod().invoke(bo);
                       setterfidld.getMethod().invoke(so,v);
                        break;
                    }

                }
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }


    }


}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有