Метод clone() определен в классе Object и предназначен для создания копии объекта.
Контракт (согласно документации Object.clone()):
Cloneable, вызов clone() выбросит CloneNotSupportedException.Object.clone() выполняет "поверхностное" копирование полей объекта. Для примитивных типов копируются значения, для ссылочных — копируются ссылки на те же самые объекты.clone() при необходимости.x.clone().getClass() == x.getClass().x.clone().equals(x) может возвращать true или false, это зависит от реализации equals() и логики копирования.Интерфейс Cloneable: Интерфейс-маркер. Указывает JVM, что класс разрешает клонирование через вызов Object.clone(). Не имеет методов.
Поверхностное vs Глубокое копирование:
Пример реализации глубокого копирования:
java
Особенности:
clone() в Object имеет модификатор доступа protected. Для вызова извне класса требуется переопределить его с модификатором public.Object, требуется приведение типа.CloneNotSupportedException.Альтернативы:
java
ObjectOutputStream и ObjectInputStream.SerializationUtils.clone()), Guava.Хотя clone() существует, его реальное использование часто ограничено из-за сложности правильной реализации глубокого копирования и наличия более гибких альтернатив.