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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 页面自动执行(加载)js的几种方法

    页面自动执行(加载)js的几种方法

    2021年10月30日
    43
  • vs2012密钥_ultimate2012产品密钥

    vs2012密钥_ultimate2012产品密钥MicrosoftVisualStudioUltimate2012旗舰版有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC;KCW6-BPFPF-BT8C9-7DCTH-QXGWC转载于:https://www.cnblogs.com/RogerLu/p/10070312.html

    2022年10月15日
    3
  • C语言实现电脑关机程序

    C语言实现电脑关机程序这个是我在网上搜索到的资料,其实也是很简单的。想使用ESP8266完成这样一个操作——远程关闭电脑,达到人在别的任何地方都可以操作我们的电脑。这个虽然已经不是羡慕新奇的事,实现的方法也撑出不穷,但我们学习ESP8266,也不失是一种体验的过程。对于初学者来说也是一种很有成就感的体验。因此,想完成远程关机,就需要理解怎么实现关机的命令及程序,我们使用C语言来完成。串口助手也可以实…

    2022年7月22日
    17
  • win10eplan激活码破解步骤3月最新在线激活

    win10eplan激活码破解步骤3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    125
  • mysql整型转字符串_java中如何将字符串转换为字符数组

    mysql整型转字符串_java中如何将字符串转换为字符数组cast(字段asunsigned)例如1:把表结构中的name(字符串)字段转化成整型cast(nameasunsigned)应用:将表A记录按name字段从小到大排列select*fromAorderbycast(nameasunsigned); http://xuyemao.blog.163.com/blog/static/24454858…

    2022年8月30日
    12
  • D-Link 路由 PCAnyWhere 端口映射

    D-Link 路由 PCAnyWhere 端口映射进入首页 设置固定DHCP服务器主机名称 IP地址(192.168.0.100)  MAC地址进入进阶设定  虚拟服务器建立新的虚拟服务器列表以下三项需建立并激活VirtualServerHTTP 192.168.0.100TCP80/80pcanywhere     192.168.0.100TCP5631/5631pcanywhere     192

    2025年11月9日
    4

发表回复

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

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