欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入java對(duì)象復(fù)制的分析

 更新時(shí)間:2013年05月17日 10:05:48   作者:  
本篇文章是對(duì)java對(duì)象復(fù)制進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

java本身提供了對(duì)象復(fù)制的能力,在java.lang.Object類(lèi)中有clone方法,該方法是一個(gè)protected方法,在子類(lèi)需要重寫(xiě)此方法并聲明為public類(lèi)型,而且還需實(shí)現(xiàn)Cloneable接口才能提供對(duì)象復(fù)制的能力,clone()是一個(gè)native方法,native方法的效率一般來(lái)說(shuō)都是遠(yuǎn)高于java中的非native方法,對(duì)性能比較關(guān)心的話(huà)首先考慮這種方式,這種復(fù)制在網(wǎng)上有很多例子就不多寫(xiě)了;在這要用的另一種方式——通過(guò)java的反射機(jī)制復(fù)制對(duì)象,這種方式效率可能會(huì)比clone()低,而且不支持深度復(fù)制以及復(fù)制集合類(lèi)型,但通用性會(huì)提高很多,下邊是進(jìn)行復(fù)制的代碼:

復(fù)制代碼 代碼如下:

private <T> T getBean(T TargetBean, T SourceBean) {
        if (TargetBean== null) return null;
        Field[] tFields = TargetBean.getClass().getDeclaredFields();
        Field[] sFields = SourceBean.getClass().getDeclaredFields();
        try {
            for (Field field : tFields ) {
                String fieldName = field.getName();
                if (fieldName.equals("serialVersionUID")) continue;
                if (field.getType() == Map.class) continue;

                if (field.getType() == Set.class) continue;

                if (field.getType() == List.class) continue;
                for (Field sField : sFields) {
                    if(!sField .getName().equals(fieldName)){
                        continue;
                    }
                    Class type = field.getType();
                    String setName = getSetMethodName(fieldName);
                    Method tMethod = TargetBean.getClass().getMethod(setName, new Class[]{type});
                    String getName = getGetMethodName(fieldName);
                    Method sMethod = SourceBean.getClass().getMethod(getName, null);
                    Object setterValue = voMethod.invoke(SourceBean, null);
                    tMethod.invoke(TargetBean, new Object[]{setterValue});
                }
            }
        } catch (Exception e) {
            throw new Exception("設(shè)置參數(shù)信息發(fā)生異常", e);
        }
        return TargetBean;
}


該方法接收兩個(gè)參數(shù),一個(gè)是復(fù)制的源對(duì)象——要復(fù)制的對(duì)象,一個(gè)是復(fù)制的目標(biāo)對(duì)象——對(duì)象副本,當(dāng)然這個(gè)方法也可以在兩個(gè)不同對(duì)象間使用,這時(shí)候只要目標(biāo)對(duì)象和對(duì)象具有一個(gè)或多個(gè)相同類(lèi)型及名稱(chēng)的屬性,那么就會(huì)把源對(duì)象的屬性值賦給目標(biāo)對(duì)象的屬性。

相關(guān)文章

  • Java實(shí)現(xiàn)圖像分割功能

    Java實(shí)現(xiàn)圖像分割功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖像分割功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 學(xué)習(xí)C語(yǔ)言對(duì)后期java有幫助嗎

    學(xué)習(xí)C語(yǔ)言對(duì)后期java有幫助嗎

    在本篇文章里小編給大家整理的是一篇關(guān)于學(xué)習(xí)C語(yǔ)言對(duì)后期java有幫助嗎的基礎(chǔ)文章,有興趣的朋友們可以參考下。
    2020-11-11
  • SpringBoot中Mybatis + Druid 數(shù)據(jù)訪(fǎng)問(wèn)的詳細(xì)過(guò)程

    SpringBoot中Mybatis + Druid 數(shù)據(jù)訪(fǎng)問(wèn)的詳細(xì)過(guò)程

    Spring Boot 底層都是采用 SpringData 的方式進(jìn)行統(tǒng)一處理各種數(shù)據(jù)庫(kù),SpringData也是Spring中與SpringBoot、SpringCloud 等齊名的知名項(xiàng)目,下面看下SpringBoot Mybatis Druid數(shù)據(jù)訪(fǎng)問(wèn)的詳細(xì)過(guò)程,感興趣的朋友一起看看吧
    2021-11-11
  • 利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的步驟

    利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的步驟

    這篇文章主要介紹了利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)一起看看吧
    2018-05-05
  • Java基礎(chǔ)之教你怎么用代碼一鍵生成POJO

    Java基礎(chǔ)之教你怎么用代碼一鍵生成POJO

    這篇文章主要介紹了Java基礎(chǔ)之教你怎么用代碼一鍵生成POJO,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    這篇文章主要介紹了詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • java操作mongodb實(shí)現(xiàn)CURD功能實(shí)例

    java操作mongodb實(shí)現(xiàn)CURD功能實(shí)例

    mongodb支持多種語(yǔ)言,并且提供了多種語(yǔ)言的驅(qū)動(dòng),本文使用java操作mongodb實(shí)現(xiàn)CURD功能,大家參考使用吧
    2013-12-12
  • Java中security與shiro的區(qū)別詳解

    Java中security與shiro的區(qū)別詳解

    這篇文章主要介紹了Java中security與shiro的區(qū)別詳解,Spring?Security在架構(gòu)上將認(rèn)證與授權(quán)分離,并提供了擴(kuò)展點(diǎn),它是一個(gè)輕量級(jí)的安全框架,它確保基于Spring的應(yīng)用程序提供身份驗(yàn)證和授權(quán)支持,需要的朋友可以參考下
    2023-08-08
  • Java比較兩個(gè)對(duì)象是否相等的方法

    Java比較兩個(gè)對(duì)象是否相等的方法

    這篇文章主要介紹了Java比較兩個(gè)對(duì)象是否相等的方法,文中給出了三種方法,并通過(guò)代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • java并發(fā)學(xué)習(xí)-CountDownLatch實(shí)現(xiàn)原理全面講解

    java并發(fā)學(xué)習(xí)-CountDownLatch實(shí)現(xiàn)原理全面講解

    這篇文章主要介紹了java并發(fā)學(xué)習(xí)-CountDownLatch實(shí)現(xiàn)原理全面講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論