De acordo com a documentação oficial, equals indica que um objeto é igual a outro e ainda define.
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
Bem como hashCode deve retornar um valor hash para dado um objeto e com a seguinte afirmação.
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.Entendo que, dado um objeto que possua sua lógica de identidade no hashCode o equals só passa mesmo a verificar se o outro a comparar não é nulo e pertence a mesma classe.
public class Modelo {
private final String modelo;
public Modelo(final String modelo){
this.modelo = modelo;
}
public int hashCode(){
return modelo.hashCode();
}
public boolean equals(Object outro){
valide(outro).comoNaoNulo().comoDaClasse(getClass());
return hashCode() == outro.hashCode();
}
}
A interpretação está correta?
Se sim, porque os IDE's tanto o Eclipse quanto o Netbeans implementam os snipets codes para equals e hashCode replicando a lógica do hashCode dentro do equals e vice-versa? Ou estou falando bobeira?