如何在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?
4 回答

蛊毒传说
TA贡献1895条经验 获得超3个赞
在包中import org.apache.commons.lang.SerializationUtils;
有一个方法:
SerializationUtils.clone(Object);
例:
this.myObjectCloned = SerializationUtils.clone(this.object);

至尊宝的传说
TA贡献1789条经验 获得超10个赞
为什么没有使用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; } }
添加回答
举报
0/150
提交
取消