Meine Klasse:Java "enthält" nicht ordnungsgemäß funktioniert
public class UserProgressModel {
private String email;
public UserProgressModel(String pEmail) {
super();
this.email = pEmail;
}
@Override
public boolean equals(Object x) {
if (x != null && x instanceof UserProgressModel
&& ((UserProgressModel) x).email.equals(this.email) == true) {
return true;
}
if (x != null && x instanceof String
&& x.equals(this.email) == true) {
return true;
}
return false;
}
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + (this.email != null ? this.email.hashCode() : 0);
return hash;
}
}
Und nachdem einige Objekte über Gson setzen:
UserProgressModel[] userProgressArray;
List<UserProgressModel> retUserProgress = new ArrayList<>();
userProgressArray = gs.fromJson(fileContents,
new TypeToken<UserProgressModel[]>() {
}.getType());
for (UserProgressModel ele : userProgressArray) {
if (ele != null) {
retUserProgress.add(ele);
}
}
vermag ich nicht für den folgenden Code um wahr zu bekommen:
retUserProgress.contains("[email protected]");
Ich durch das Array geloopt, um zu überprüfen, ob ein Objekt die E-Mail hat.
Mache ich richtig? Ich denke, ich habe die Gleichen & Hashcode überschrieben.
Wenn Sie 'UserProgressModel.equals (...)' Ihnen sagen, dass das Objekt einem 'String' entspricht, entspricht dies nicht dem allgemeinen Vertrag der 'equals'-Methode. Ein 'UserProgressModel' ist nicht wirklich" gleich "einer Zeichenkette. Darüber hinaus gibt 'myString.equals (myUserProgressModel)' immer false zurück, sodass Sie eine asymmetrische Gleichheit erstellen. Außerdem haben Ihre Zeichenfolge und Ihre Modellinstanz unterschiedliche Hash-Codes, daher sollten sie nicht so aussehen, als wären sie gleich. – khelwood
retUserProgress ist eine Liste ... Nicht direkt UserProgressModel, also vielleicht ist das ein Problem. – Hrabosch