📜  如何在java中复制对象(1)

📅  最后修改于: 2023-12-03 15:24:32.295000             🧑  作者: Mango

如何在 Java 中复制对象

在 Java 中复制对象有多种方法,我们下面将为您介绍常见的几种方法。

1. 使用对象的 clone() 方法

在 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();
2. 使用对象的序列化和反序列化

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);
3. 使用对象的构造函数

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);
4. 使用 BeanUtils 工具类

Apache Commons BeanUtils 是一个使用反射机制实现操作 Java 对象的工具类,可以将一个对象的属性值复制到另一个对象中。

Person person = new Person("Tom", 25);
Person clonedPerson = new Person();
BeanUtils.copyProperties(clonedPerson, person);
总结

以上四种方法都可以用于在 Java 中复制对象,具体使用哪种方法需要根据具体情况而定。