Ich sah zwei verschiedene Version diesen Code, einen von Java Oralce und den anderen von Youtube. Der einzige Unterschied zwischen den beiden Versionen ist der Parametertyp der equals() -Methode. Einer davon ist equals(Object o)
, während der andere equals(Name o)
ist. Ich habe mich nur gefragt, ob es einen sinnvollen Unterschied zwischen den beiden Versionen gibt? Wenn ja, welche Auswirkung hat es? Danke für jede Hilfe, die ich bekommen konnte!Gibt es irgendeinen bedeutungsvollen Unterschied zwischen Gleichem (Objekt o) und Gleichem (Name o)? Wenn ja, welche Implikation hat es?
public class Name implements Comparable<Name> {
private final String firstName, lastName;
public Name(String firstName, String lastName) {
if (firstName == null || lastName == null)
throw new NullPointerException();
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() { return firstName; }
public String lastName() { return lastName; }
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name) o;
return n.firstName.equals(firstName) && n.lastName.equals(lastName);
}
public int hashCode() {
return 31*firstName.hashCode() + lastName.hashCode();
}
public String toString() {
return firstName + " " + lastName;
}
public int compareTo(Name n) {
int lastCmp = lastName.compareTo(n.lastName);
return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
}
}
Um 'equals' zu überschreiben, muss der Parameter ** **' 'Objekt' 'sein, nicht etwas anderes. Sonst * überlädst du *, überschreibst nicht, und das falsche 'equals' wird in verschiedenen Kontexten aufgerufen. Die verknüpfte Frage und ihre Antworten (und einige andere hier auf SO) haben Details. –