Добрый день. С праздником!!! Кто не в прорубе подскажите, пожалуйста ТОЛЬКО НЕ РЕШЕНИЕ!!!
Не пойму ошибки==Карта users клонированного объекта не должна являться(сравнение через ==) картой users клонируемого объекта.
package com.javarush.task.task21.task2107;
import java.util.LinkedHashMap;
import java.util.Map;
/*
Глубокое клонирование карты
*/
public class Solution implements Cloneable{
@Override
protected Solution clone() throws CloneNotSupportedException {
Solution solution=new Solution();
solution=(Solution) super.clone();
return solution;
}
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.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();
@Override
public boolean equals(Object o) {
if (this==o) return true;
if (!(o instanceof Solution)) return false;
Solution ss = ( Solution) o;
return users!= null ? ss.users.equals(this) : users == null;
}
@Override
public int hashCode() {
int result = users.hashCode() != 0 ? users.hashCode(): 0;
return result;
}
public static class User implements Cloneable {
int age;
String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
@Override
protected User clone() throws CloneNotSupportedException {
User solution=new User(age,name);
solution=(User) super.clone();
return (User) super.clone();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User solution = (User) o;
if (this.age != 0 ? this.age!=solution.age : solution.age != 0) return false;
return this.name != null ? this.name.equals(solution.name) : solution.name == null;
}
@Override
public int hashCode() {
int result = this.age != 0 ? age : 0;
result = 31 * result + (this.name != null ? name.hashCode() : 0);
return result;
}
}
}