如何在Java中复制对象?

如何在Java中复制对象?

请考虑以下代码:


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'

所以,我想复制dum到dumtwo并更改dum而不影响dumtwo。但上面的代码并没有这样做。当我改变某些内容时dum,也会发生同样的变化dumtwo。


我想,当我说dumtwo = dum,Java 只复制引用。那么,有没有办法创建一个新的副本dum并分配给它dumtwo?


狐的传说
浏览 2191回答 4
4回答

蛊毒传说

在包中import org.apache.commons.lang.SerializationUtils;有一个方法:SerializationUtils.clone(Object);例:this.myObjectCloned = SerializationUtils.clone(this.object);

至尊宝的传说

为什么没有使用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;         }     }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java