Вот пример метода для глубокого копирования:
import java.io.*;
public class DeepCopyExample {
public static void main(String[] args) {
Person person = new Person("John", 30);
Person deepCopy = deepCopy(person);
System.out.println("Original: " + person.getName() + ", " + person.getAge());
System.out.println("Deep copy: " + deepCopy.getName() + ", " + deepCopy.getAge());
}
public static <T extends Serializable> T deepCopy(T object) {
try {
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
objectOutputStream.writeObject(object);
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
T copy = (T) objectInputStream.readObject();
return copy;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
В этом примере мы создаем класс
Person
, который реализует интерфейс Serializable
, чтобы объекты этого класса можно было сериализовать и десериализовать. Затем мы создаем метод deepCopy
, который принимает объект и возвращает его глубокую копию.Мы используем
ByteArrayOutputStream
и ObjectOutputStream
, чтобы записать объект в байтовый массив, а затем ByteArrayInputStream
и ObjectInputStream
, чтобы прочитать копию объекта из массива.В методе
main
мы создаем объект Person
, затем создаем его глубокую копию с помощью метода deepCopy
и выводим на экран значения оригинального и скопированного объекта.