Nehmen wir an, ich habe Klasse User
:Ist es angemessen, dass equals() nur von einer ID abhängt?
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal account;
// other fields, getters and setters
}
Ist es richtig, die equals
Methode außer Kraft zu setzen wie folgt?
@Override
public boolean equals(Object ob) {
if (ob == null) {
return false;
}
if (this == ob) {
return true;
}
if (ob instanceof User) {
User other = (User) ob;
return this.id.equals(other.getId());
}
return false;
}
Es stellt sich heraus, dass die Einzigartigkeit eines Objekts nur durch seine ID bestimmt wird. Aber in meiner Anwendung ist id
immer eindeutig. Es ist in der Datenbank zur Verfügung gestellt. Ist meine equals
Implementierung kompetent genug, um dies zu erklären? Oder ist das nicht die beste Vorgehensweise?
Natürlich verstehe ich, dass in diesem Fall die hashCode
Umsetzung der folgenden sein sollte:
@Override
public int hashCode() {
return id.intValue();
}
Was brauchen Sie '.equals()' für, wenn überhaupt? – fge
Es sieht aus wie du bist gut. Wenn das Objekt gleich ist, wenn die IDs gleich sind, haben Sie den richtigen Code. – greedybuddha
Bevor ein 'Benutzer' beibehalten wird, kann' id' null sein und dann wird 'equals' geworfen. Aber das ist nur eine Warze. Ich habe dein Muster oft gesehen. Eine SO-Frage führte zu diesem Teil der Hibernate-Dokumentation, die für Sie keine Rolle spielt: http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html#persistent- Klassen-Equalshashcode –