📅  最后修改于: 2023-12-03 15:24:32.295000             🧑  作者: Mango
在 Java 中复制对象有多种方法,我们下面将为您介绍常见的几种方法。
在 Java 中,Object 类中提供了 clone() 方法,可以用于复制对象。但是该方法是 protected 访问修饰符,需要在子类中实现 Cloneable 接口,并且重写 clone() 方法。
public class Person implements Cloneable {
private String name;
private int age;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// getter/setter omitted
}
Person person = new Person("Tom", 25);
Person clonedPerson = (Person) person.clone();
Java 中的对象可以序列化和反序列化,通过这种方式我们可以将一个对象写入输出流中,再从输入流中读取,就实现了对象的复制。
public static <T> T clone(T obj) throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (T) ois.readObject();
}
Person person = new Person("Tom", 25);
Person clonedPerson = clone(person);
Java 中对象的构造函数可以用于新建对象,所以我们可以通过对象的构造函数来复制对象。
public class Person {
private String name;
private int age;
public Person(Person person) {
this.name = person.getName();
this.age = person.getAge();
}
// getter/setter omitted
}
Person person = new Person("Tom", 25);
Person clonedPerson = new Person(person);
Apache Commons BeanUtils 是一个使用反射机制实现操作 Java 对象的工具类,可以将一个对象的属性值复制到另一个对象中。
Person person = new Person("Tom", 25);
Person clonedPerson = new Person();
BeanUtils.copyProperties(clonedPerson, person);
以上四种方法都可以用于在 Java 中复制对象,具体使用哪种方法需要根据具体情况而定。