Java中,复制一个对象,有啥好的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中,复制一个对象,有啥好的方法相关的知识,希望对你有一定的参考价值。

就是在内存中开辟一块空间,新建一个实例,与一个已有的实例的属性一模一样。包括其中的Map、List等容器类属性里的内容都一模一样

使用Java的反射机制实现:为了能更好的区分,写成了两个类,可以运行下面的代码看看效果
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test
public static void main(String[] args) throws Exception
Customer1 c1 = new Customer1();
c1.setName("c1");
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
c1.setList(list);
Map<String,String> map = new HashMap<String, String>();
map.put("map1", "map1");
map.put("map2", "map2");
c1.setMap(map);
Customer2 c2 = new Customer2();
//
Class c = c1.getClass();
Class class2 = c2.getClass();
Field fields[] = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++)
Field field = fields[i];
String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getMethodName = "get" + firstLetter + fieldName.substring(1);
String setMethodName = "set" + firstLetter + fieldName.substring(1);
Method getMethod = c.getMethod(getMethodName, new Class[] );
Method setMethod = class2.getMethod(setMethodName,
new Class[] field.getType() );
Object value = getMethod.invoke(c1, new Object[] );
setMethod.invoke(c2, new Object[] value );

System.out.println(c2.getName());
System.out.println(c2.getList());
System.out.println(c2.getMap());


class Customer1
private String name;
private List<String> list;
private Map<String, String> map;
public String getName()
return name;

public void setName(String name)
this.name = name;

public List<String> getList()
return list;

public void setList(List<String> list)
this.list = list;

public Map<String, String> getMap()
return map;

public void setMap(Map<String, String> map)
this.map = map;


class Customer2
private String name;
private List<String> list;
private Map<String, String> map;
public String getName()
return name;

public void setName(String name)
this.name = name;

public List<String> getList()
return list;

public void setList(List<String> list)
this.list = list;

public Map<String, String> getMap()
return map;

public void setMap(Map<String, String> map)
this.map = map;

参考技术A 需要克隆的实例所属类需要implements Cloneable然后重写clone()方法 参考技术B 直接implements Cloneable然后clone();

以上是关于Java中,复制一个对象,有啥好的方法的主要内容,如果未能解决你的问题,请参考以下文章

java面向对象这一块我老是搞不懂,你们有啥好的学习方法可以告诉我吗

将 CopyData 用于提升的应用程序有啥好的替代方法

Java 导出 Word 表格有啥好的办法

JAVA有啥好的方法可以将word里的文本读取出来

java 判断条件过多怎么办?有啥好的解决办法吗?

不处理 C# 方法的返回值可以吗?这个例子中有啥好的做法?