Назад к вопросам
Senior
5
Какими способами можно сделать глубокую копию объекта?
Компании, где спрашивали
РТЛабс
Ответ от нейросети
sobes.tech AI
Глубокая копия объекта — это создание нового объекта, который является полным клоном исходного, включая все вложенные объекты, а не только поверхностное копирование ссылок.
Основные способы сделать глубокую копию в Java:
-
Реализация интерфейса Cloneable и переопределение метода clone()
- Нужно рекурсивно клонировать все вложенные объекты.
- Сложно и требует аккуратности.
-
Сериализация и десериализация
- Сериализовать объект в байтовый поток, затем десериализовать обратно.
- Требует, чтобы все объекты были Serializable.
public static <T extends Serializable> T deepCopy(T object) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(object);
try (ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais)) {
return (T) ois.readObject();
}
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
-
Использование библиотек для копирования
- Например, Apache Commons Lang SerializationUtils.clone(), или библиотеки вроде Gson/Jackson для сериализации в JSON и обратно.
-
Реализация собственного метода копирования (copy constructor или фабричный метод)
- Создать новый объект и вручную скопировать все поля, включая вложенные объекты.
Выбор способа зависит от требований к производительности, наличия Serializable и сложности объекта.