Прошу помощи, чтобы понять, что еще нужно, чтобы валидатор принял решение. Я уже зациклился, хотя задача не сложная.
Вот условие:
Ошибка в equals/hashCode
Исправьте ошибки реализаций методов equals и hashCode для класса Solution.
Требования:
1. Хешкоды одинаковых объектов должны быть равны.
2. Метод equals должен проверять равен ли переданный объект равен текущему (сравнение через ==).
3. Метод equals должен проверять является ли переданный объект объектом класса Solution.
4. Метод equals должен проверять значения всех полей у переданного объекта и текущего (учти что некоторые из них могут быть равны null).
5. Должно быть обеспечено корректное поведение HashSet с типом элементов Solution.
6. В классе Solution должен быть реализован метод hashCode.
import java.util.Date;
/*
Ошибка в equals/hashCode
*/
public class Solution {
private int anInt;
private String string;
private double aDouble;
private Date date;
private Solution solution;
public Solution(int anInt, String string, double aDouble, Date date, Solution solution) {
this.anInt = anInt;
this.string = string;
this.aDouble = aDouble;
this.date = date;
this.solution = solution;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Solution) return true;
Solution solution1 = (Solution) o;
if (aDouble != 0.0d? aDouble != solution1.aDouble : solution1.aDouble != 0.0d) return false;
if (anInt != 0 ? anInt != solution1.anInt : solution1.anInt != 0) return false;
if (date != null ? !date.equals(solution1.date) : solution1.date != null) return false;
if (date == null || solution1.date == null) return false;
if (solution != null ? !solution.equals(solution1.solution) : solution1.solution != null) return false;
if (solution == null || solution1.solution == null) return false;
if (string != null ? !string.equals(solution1.string) : solution1.string != null) return false;
if (string == null || solution1.string == null) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
result = anInt;
temp = aDouble != +0.0d ? Double.doubleToLongBits(aDouble) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (solution != null ? solution.hashCode() : 0);
return result;
}
public static void main(String[] args) {
}
}
Это уже далеко не первый вариант, но решение не проходит, хотя, по-моему я проверяю на null.package com.javarush.task.task21.task2106;
import java.util.Date;
/*
Ошибка в equals/hashCode
*/
public class Solution {
private int anInt;
private String string;
private double aDouble;
private Date date;
private Solution solution;
public Solution(int anInt, String string, double aDouble, Date date, Solution solution) {
this.anInt = anInt;
this.string = string;
this.aDouble = aDouble;
this.date = date;
this.solution = solution;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Solution) return true;
Solution solution1 = (Solution) o;
// firstname == guest.firstname || (firstname != null &&
// firstname.equals(guest.firstname));
if (aDouble != 0.0d? aDouble != solution1.aDouble : solution1.aDouble != 0.0d) return false;
// if (aDouble == 0.0 || solution1.aDouble == 0.0) return false;
if (anInt != 0 ? anInt != solution1.anInt : solution1.anInt != 0) return false;
//if (anInt == 0 || solution1.anInt == 0) return false;
if (date != null ? !date.equals(solution1.date) : solution1.date != null) return false;
if (date == null || solution1.date == null) return false;
if (solution != null ? !solution.equals(solution1.solution) : solution1.solution != null) return false;
if (solution == null || solution1.solution == null) return false;
if (string != null ? !string.equals(solution1.string) : solution1.string != null) return false;
if (string == null || solution1.string == null) return false;
//if ( aDouble != solution1.aDouble ) return false;
//if ( anInt != solution1.anInt) return false;
//if (date == null || !date.equals(solution1.date) || solution1.date == null) return false;
//if (solution == null || !solution.equals(solution1.solution) || solution1.solution == null) return false;
//if (string == null || !string.equals(solution1.string) || solution1.string == null) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
result = anInt;
temp = aDouble != +0.0d ? Double.doubleToLongBits(aDouble) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (solution != null ? solution.hashCode() : 0);
return result;
}
public static void main(String[] args) {
}
}