Вот примерная пара hashCode\equals
, сгенерированная IDE:
class Sample {
final int area;
final Set<Integer> someData;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Sample sample = (Sample) o;
if (area != sample.area) return false;
if (!someData.equals(sample.someData)) return false;
return true;
}
@Override
public int hashCode() {
int result = area;
result = 31 * result + someData.hashCode();
return result;
}
}
Этот код предполагает, что someData
не может быть нулевым - для упрощения вещей. Вы можете видеть, что сначала проверяется равенство типов, затем проверяется равенство area
, а затем проверяется равенство Set<Integer>
. Обратите внимание, что для этого используется встроенный equals
из Set
- так что вы можете использовать этот метод повторно. Это идиоматический способ проверки составных типов на равенство.