Назад к задачам
Junior — Senior
23

Реализация глубокой копии объекта Customer

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Задача состоит в том, чтобы реализовать метод clone() в классе Customer, который будет создавать полную (глубокую) копию данного объекта.

Требования:

  1. Склонированный объект не должен ссылаться на те же вложенные экземпляры (Address, List<CellNumber>), что и оригинал.
  2. Все вложенные структуры внутри Customer должны быть независимыми копиями.
  3. После выполнения клонирования метод equals() должен возвращать true, однако ссылки на вложенные объекты должны указывать на разные экземпляры.
package com.jetbulb.interviews;

import java.util.Collections;
import java.util.List;

public class JetbulbInterview {
    public static void main(String[] args) {
        Customer customer = new Customer(
                "123",
                66,
                new Address(1, "Street"),
                Collections.singletonList(new CellNumber("777-555-666", 3.14D))
        );

        Customer clonedCustomer = customer.clone();

        System.out.println(customer.equals(clonedCustomer)); // true
        System.out.println(customer == clonedCustomer); // false
        System.out.println(customer.address == clonedCustomer.address); // false
        System.out.println(customer.number == clonedCustomer.number); // false
    }
}

class Customer implements Cloneable {
    String id;
    int age;
    Address address;
    List<CellNumber> number;
}

class Address implements Cloneable {
    int id;
    String name;
}

class CellNumber implements Cloneable {
    String number;
    double coverage;
}