第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何在Java中復(fù)制對象?

如何在Java中復(fù)制對象?

狐的傳說 2019-05-29 17:39:12
如何在Java中復(fù)制對象?請考慮以下代碼:DummyBean dum = new DummyBean();dum.setDummy("foo");System.out.println(dum.getDummy()); // prints 'foo'DummyBean dumtwo = dum;System.out.println(dumtwo.getDummy()); // prints 'foo'dum.setDummy("bar");System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'所以,我想復(fù)制dum到dumtwo并更改dum而不影響dumtwo。但上面的代碼并沒有這樣做。當(dāng)我改變某些內(nèi)容時(shí)dum,也會發(fā)生同樣的變化dumtwo。我想,當(dāng)我說dumtwo = dum,Java 只復(fù)制引用。那么,有沒有辦法創(chuàng)建一個(gè)新的副本dum并分配給它dumtwo?
查看完整描述

4 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

在包中import org.apache.commons.lang.SerializationUtils;有一個(gè)方法:

SerializationUtils.clone(Object);

例:

this.myObjectCloned = SerializationUtils.clone(this.object);


查看完整回答
反對 回復(fù) 2019-05-29
?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

為什么沒有使用Reflection API的答案?

private static Object cloneObject(Object obj){
        try{
            Object clone = obj.getClass().newInstance();
            for (Field field : obj.getClass().getDeclaredFields()) {
                field.setAccessible(true);
                field.set(clone, field.get(obj));
            }
            return clone;
        }catch(Exception e){
            return null;
        }
    }

這很簡單。

編輯:通過遞歸包含子對象

private static Object cloneObject(Object obj){
        try{
            Object clone = obj.getClass().newInstance();
            for (Field field : obj.getClass().getDeclaredFields()) {
                field.setAccessible(true);
                if(field.get(obj) == null || Modifier.isFinal(field.getModifiers())){
                    continue;
                }
                if(field.getType().isPrimitive() || field.getType().equals(String.class)
                        || field.getType().getSuperclass().equals(Number.class)
                        || field.getType().equals(Boolean.class)){
                    field.set(clone, field.get(obj));
                }else{
                    Object childObj = field.get(obj);
                    if(childObj == obj){
                        field.set(clone, clone);
                    }else{
                        field.set(clone, cloneObject(field.get(obj)));
                    }
                }
            }
            return clone;
        }catch(Exception e){
            return null;
        }
    }


查看完整回答
反對 回復(fù) 2019-05-29
  • 4 回答
  • 0 關(guān)注
  • 2208 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號