搬砖_BeanUtils的扩展

简单描述一下: org.apache.commons.beanutils.BeanUtils只能对单个对象进行复制,如果对列表的话,就得自己遍历,所以扩展一下

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;

public class BeanUtilsExtend extends org.apache.commons.beanutils.BeanUtils{
    private static final Log log = LogFactory.getLog(BeanUtilsExtend.class);

    public static <t1, t2> List<t2> listCopy(List<t1> sourceList, Class<t2> clazz) {
        return (List) sourceList.stream().map((source)->{
            Object target;
            try {
                target = clazz.getDeclaredConstructor().newInstance();
            } catch (Exception e) {
                throw new RuntimeException();
            }
            beanCopy(source, target);
            return target;
        }).collect(Collectors.toList());
    }

    public static void beanCopy(Object fromBean, Object toBean)
    {
        try
        {
            fromBean.getClass().getMethods();
            Method[] setMethods = toBean.getClass().getMethods();
            for (Method setMethod : setMethods) {
                if (!setMethod.getName().startsWith("set")) {
                    continue;
                }
                String fieldName = setMethod.getName().substring(3);

                Method getMethod = null;
                try {
                    getMethod = fromBean.getClass().getMethod("get" + fieldName, new Class[0]);
                } catch (NoSuchMethodException localNoSuchMethodException) {
                    continue;
                }

                if (getMethod.getReturnType() != setMethod.getParameterTypes()[0])
                {
                    log.warn("Type mismatch when beanCopy: " + getMethod.getReturnType().getCanonicalName() + " -> " + setMethod.getParameterTypes()[0].getCanonicalName());
                }
                else
                {
                    Object fieldValue = getMethod.invoke(fromBean, null);

                    setMethod.invoke(toBean, new Object[] { fieldValue });
                }
            }
        } catch (Exception e) {
            throw new IllegalArgumentException("beanCopy issue", e);
        }
    }
}

</t2></t1></t2></t1,>

Original: https://www.cnblogs.com/deanCopy/p/16337847.html
Author: Dean_001
Title: 搬砖_BeanUtils的扩展

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580062/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 《将博客搬至CSDN》

    返回顶部 新文章 《将博客搬至CSDN》 《将博客搬至CSDN》 posted on2020-12-09 12:08 GirlsBoy 阅读(63 ) 评论() 编辑 梦想程序改变…

    Java 2023年6月13日
    074
  • 3.Spring IoC阐述

    控制反转的概念:控制反转是一种通过描述(在Java中可以是XML或者注解)并通过第三方去产生或获取特定对象的方式. 在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入…

    Java 2023年6月9日
    089
  • Vue项目环境搭建

    1、安装node https://nodejs.org/en/选择最新版本安装 2、安装成功后,命令窗口查看node是否安装成功 node 查看版本 node -v 3、安装淘宝镜…

    Java 2023年6月9日
    089
  • 个人springboot配置项

    update user set u_name="lisi"​ 应用名称 spring.application.name=auction_java 应用服务 WE…

    Java 2023年6月7日
    093
  • java 导出word 包含echarts图表

    需求是导出word,里面有数据统计图表。 要从后端直接导出图表的话,思路是这样的: 先通过echarts生成图片,通过phantomjs 截图,将图片暂存在本地,再将图片转换成ba…

    Java 2023年6月13日
    086
  • 2020年10月23日笔记

    Java8特性待更新 在公司项目里面有很多这类代码,熟练使用后能够加快开发速度。1、快速便利map的方法map进行快速遍历的方法map.forEach((key,value)-&g…

    Java 2023年6月13日
    071
  • Buuctf-Web-[ACTF2020 新生赛]Include

    前言 刷题网址:https://buuoj.cn/challenges#[ACTF2020 新生赛]Include 首先打开网页,提示 tips点击他,根据题目提示很难不想到是文件…

    Java 2023年6月13日
    0113
  • linux离线安装glibc.i686

    链接:https://pan.baidu.com/s/1mXxregN0B2qinDRvTwdyFg 提取码:g7od 资源如下图所示: 安装步骤: 1、通过百度网盘下载资源 2、…

    Java 2023年6月16日
    086
  • spring时遇到的小问题

    最近在学习spring的时候遇到了两个小问题,在此总结一下 1.少导了所需要的包 运行测试程序,报出以下错误. 初步分析,得知是dataSource数据源没有创建成功,以为data…

    Java 2023年6月14日
    060
  • M1 MAC 装ubuntu更换镜像源

    记录一下今天突发奇想装个ubuntu遇到问题 w镜像源:更换镜像源网上教程基本对的,但要注意机型(ps:m1 mac) 补:很多时候是对问题理解不到位,比如我直接搜索arm ubu…

    Java 2023年6月9日
    0177
  • MySQL查询生成行号

    Oracle中可以使用ROWNUM,MYSQL无该关键词,需要使用以下形式: SELECT @rowNum:=@rowNum + 1 AS ‘行号’, a.X1, a.X2, a….

    Java 2023年6月5日
    065
  • Mybatis-plus代码生成器3.5.1

    导入依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot…

    Java 2023年6月9日
    0109
  • 想入门数据结构,却总是拜倒在链表的石榴裙下?

    大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦不过这篇文章呢,还是想跟大家聊一聊数据结构与算法,学校也是大二上才开设了数据…

    Java 2023年6月5日
    0101
  • request.getParameter(“参数名”) 中文乱码解决方法

    解决问题,先要研究问题,URL传中文参数为什么会出现乱码? 原因:Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字…

    Java 2023年6月5日
    080
  • HIT软构博客4–lab1记录与总结

    ​ 完成一个实验或小的项目使用java在需要的时候去搜索和看书比直接看很厚的书有意义一些,体验更加良好。自己对java的掌握不是很好,大一结束的夏天认真学习了java看了核心技术的…

    Java 2023年6月5日
    0107
  • 注解@Slf4j

    如果不想每次都写private final Logger logger = LoggerFactory.getLogger(XXX.class); 可以用注解@Slf4j 一、在p…

    Java 2023年6月13日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球