Добрый день. Валидатор говорит, что методы clone() в классах User, Solution возвращают не новый объект, а текущий. Но ведь это не так, ибо в методах clone() создаются новые объекты. Подскажите, в чём тут дело? Условия задачи: Обеспечь возможность клонирования объекта класса Solution используя глубокое клонирование. Данные в карте users также должны быть клонированы. Не забудь о методах equals и hashCode для корректного добавления элементов типа User в HashMap. Требования: 1. Класс Solution должен поддерживать интерфейс Cloneable. 2. Класс User должен поддерживать интерфейс Cloneable. 3. В классе User должен быть корректно реализован метод clone. 4. В классе Solution должен быть корректно реализован метод clone.
package com.javarush.task.task21.task2107;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;

/*
Глубокое клонирование карты
*/
public class Solution implements Cloneable {

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.users.put("Hubert", new User(172, "Hubert"));
        solution.users.put("Zapp", new User(41, "Zapp"));
        Solution clone = null;
        try {
            clone = (Solution) solution.clone();
            System.out.println(solution);
            System.out.println(clone);

            System.out.println(solution.users);
            System.out.println(clone.users);

        } catch (CloneNotSupportedException e) {
            e.printStackTrace(System.err);
        }
    }

    protected Map<String, User> users = new LinkedHashMap();

    public static class User implements Cloneable {
        int age;
        String name;

        public User(int age, String name) {
            this.age = age;
            this.name = name;
        }

        @Override
        protected Object clone() throws CloneNotSupportedException {
            return new User(this.age, this.name);
        }

        @Override
        public int hashCode() {
            if (name == null) return age;
            else return age + name.hashCode();
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) return true;
            if (!(obj instanceof User)) return false;
            return Objects.equals(this.age, ((User) obj).age) && Objects.equals(this.name, ((User) obj).name);
        }
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Solution solution = new Solution();
        solution.users = new LinkedHashMap<>(this.users);
        return solution;
    }

    @Override
    public int hashCode() {
        if (users == null) return 0;
        else return users.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof Solution)) return false;
        return Objects.equals(this.users, ((Solution) obj).users);
    }
}