beancopier 深拷贝_对象的拷贝有几种方法

beancopier 深拷贝_对象的拷贝有几种方法BeanCopier对象拷贝packagecom.xmsme.nicsp.monitor.util;importjava.util.List;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;importorg.springframework.cglib.beans.BeanCopier;/***BeanCopier工具类**@authorzwy*/public…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

BeanCopier 对象拷贝

  1. 对象拷贝转为其他类的对象
  2. 对象数组拷贝转为其他类的对象数组

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.cglib.beans.BeanCopier;

/**
 * BeanCopier工具类
 *
 * @author zwy
 */
public class BeanCopierUtil {
    private static Map<String, BeanCopier> beanCopierMap = new ConcurrentHashMap<>();

    /**
     * 初始化 BeanCopier
     *
     * @param source
     * @param target
     * @return
     */
    private static BeanCopier initCopier(Class source, Class target) {
        BeanCopier beanCopier = BeanCopier.create(source, target, false);
        beanCopierMap.put(source.getName() + "_" + target.getName(), beanCopier);
        return beanCopier;
    }


    /**
     * 获取BeanCopier
     *
     * @param source
     * @param target
     * @return
     */
    private static BeanCopier getBeanCopier(Class source, Class target) {
        BeanCopier beanCopier = beanCopierMap.get(source.getClass().getName() + "_" + target.getName());
        if (beanCopier != null) {
            return beanCopier;
        }
        return initCopier(source, target);
    }


    /**
     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)
     *
     * @param source 原对象
     * @param targetClass 目标类
     * @param <T>
     * @return
     */
    public static <T> T convert(Object source, Class<T> targetClass) {
        if (source == null) {
            return null;
        }
        BeanCopier beanCopier = getBeanCopier(source.getClass(), targetClass);
        try {
            T target = targetClass.getDeclaredConstructor().newInstance();
            beanCopier.copy(source, target, null);
            return target;

        } catch (Exception e) {
            throw new RuntimeException("对象拷贝失败" + source + "_" + targetClass);
        }
    }

    /**
     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)
     *
     * @param source 原对象
     * @param targetClass 目标类
     * @param <E>
     * @return
     */
    public static <E> List<E> convert(List source, Class<E> targetClass) {
        if (source == null) {
            return null;
        }
        try {
            if (source.isEmpty()) {
                return source.getClass().getDeclaredConstructor().newInstance();
            }
            List result = source.getClass().getDeclaredConstructor().newInstance();

            for (Object each : source) {
                result.add(convert(each, targetClass));
            }
            return result;
        } catch (Exception e) {
            throw new RuntimeException("对象拷贝失败" + source + "_" + targetClass);
        }
    }


}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197189.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月12日 上午10:22
下一篇 2025年9月12日 上午11:01


相关推荐

  • idea tomcat catalina log乱码_xshell查看日志乱码怎么解决

    idea tomcat catalina log乱码_xshell查看日志乱码怎么解决以前一直使用Eclipse,现在试用IDEA,遇到一些坑,通过网上的答案基本都解决了,但有些答案不好,比如这个问题。1、原因分析Tomcat运行JavaWeb的程序,在IDEA控制台中输出显示,我们一般都是用UTF8编码。从Java源码到IDEA控制台,大致分为几个阶段:1)源码:即*.java原文件,是纯文本文件。编码方式在IDEA的Settings>Editor>FileEncodings中设置;2)…

    2026年4月14日
    5
  • datagrip激活码2021_在线激活

    (datagrip激活码2021)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
    105
  • 养虾者,勿以身饲虾

    养虾者,勿以身饲虾

    2026年3月12日
    2
  • 模糊聚类及matlab实现,matlab模糊聚类程序

    模糊聚类及matlab实现,matlab模糊聚类程序matlab 模糊聚类程序 由会员分享 可在线阅读 更多相关 matlab 模糊聚类程序 17 页珍藏版 请在人人文库网上搜索 1 实用标准文档文案大全 3 数据标准化 1 数据矩阵设论域 U 二伪必匹 庞 沧 冷必压必 0 为 1 必 2 为被分类的对象 每个对象又由指标 Y 丫 6 9 表示其性状即 Xi 冷 x2 x3 x4 x5 xi6 xi7 為 Xi9 XlOXll 冷分 i

    2026年3月17日
    2
  • 金士顿16G优盘_金士顿u盘格式化分配单元大小

    金士顿16G优盘_金士顿u盘格式化分配单元大小事情起因好好的金士顿16g优盘(绝对是真的,之前本人已经使用了2年多),今天本来准备用U盘装个win10系统,从微软官网下载了MediaCreationTool.exe用这个工具做了一个U盘系统,然后装系统(系统也没有装成。。。。。悲剧),谁知道重启之后,优盘可以识别,但是只显示一个盘符,没有容量,双击优盘,就显示请插入优盘之类的。换了一台电脑,插上U盘,显示需要格式化,那就格式化吧。。。。。。几

    2025年10月17日
    5
  • 七、分发脚本xsync报错

    七、分发脚本xsync报错一、报错问题Badownerorpermissionson/home/pcz/.ssh/configBadownerorpermissionson/home/pcz/.ssh/configrsync:connectionunexpectedlyclosed(0bytesreceivedsofar)[sender]rsyncerror:unexplainederror(code255)atio.c(226)[sender=3.1.2]Badow

    2022年5月5日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号