java 对象之间的属性拷贝

花生 可爱的博主

时间: 2021-04-14 阅读: 243 字数:1961

{}
这个是我自己写的方法,非常实用。

这个方法太实用了。

分享给你们

方法用来做什么?
如果当2个对象中有相同的属性,则可以使用改工具方法。省掉set方法 ,如果属性未null也不会报错
/**
     * 属性的拷贝转移
     * @param news 被改变的属性
     * @param worn 被转移数据的对象
     * @param <Y> 泛型
     * @author 邵嘉喜
     */
    public  <Y> void  CopyProper(Y news,Y  worn) throws IllegalAccessException, InstantiationException {
        Class<?> newsClass = news.getClass();
        Class<?> wornClass = worn.getClass();
//        //实例化对象
//        Object newsObj = newsClass.newInstance();
//        Object wornObj = wornClass.newInstance();
        //获取类中所有的属性(被转移数据的对象)
        Field[] newsFields = newsClass.getDeclaredFields();
        //获取类中所有的属性(被改变的属性)
        Field[] wornFields = wornClass.getDeclaredFields();
        for(Field newsfield:newsFields){
            newsfield.setAccessible(true);

            //获取属性名称
            String name = newsfield.getName();
            //获取属性值
            Object pro = newsfield.get(news);
            for (Field wornField : wornFields) {
                wornField.setAccessible(true);
                //获取属性名
                Object wornName = wornField.getName();
                boolean isFinal = Modifier.isFinal(wornField.getModifiers());
                Object o = wornField.get(worn);
                if(name.equals(wornName) && !isFinal && o == null && pro != null){
                    wornField.set(worn,pro);
                    break;
                }
            }
        }
    }

使用方法

TessayInfo info = new TessayInfo();//需要被赋值的对象
        try {
            ProperUtils.CopyProper(tEssay,info);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
本文章网址:https://www.sjxi.cn/detil/c2abcb0fbc824992b93892a032e0f4b0

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复