[英]Method “contains”.Java List
我有Spring MVC應用程序。 我有實體課考試。 我重寫方法eqauls所以我可以使用包含List接口的方法。 當我嘗試添加新考試時,我看看是否已經添加了它。 但是當我通過考試對象到mathod包含時,我總是有不同的學生。 例如:我需要在Student Jone中添加考試。 我嘗試添加它並獲得另一個信息:Kate:Jone,而不是Jone:Jone。 我不知道為什么我會發生,因為當我將學生設為Jone時,我通過考試對象。
@Override
public boolean equals(Object arg) {
Examination exam = (Examination) arg;
System.out.println(exam.getStudent().getStudentFullName() + ":" + this.getStudent().getStudentFullName());
if (!this.subject.getSubjectTitle().equals(exam.getSubject().getSubjectTitle()))
return false;
else
return true;
}
我嘗試添加考試的一段代碼
examination.setStudent(currentStudent); // set student
examination.setSubject(subjectExam); // set subject
if(es.selectAllExams().contains(examination)) {
return "error";
} else {
es.insertExam(examination); // add to database
return "success";
}
在equals方法中,您只比較標題,而不是學生姓名。 因此,如果您有兩個相同標題的考試,但不同的學生名稱相同(基於您的等於方法)。 比較equals方法的學生,你應該是好的。 通常,優先考慮覆蓋equals和hashcode方法。
您的equals方法的實現通常不遵循覆蓋equals方法的最佳實踐。 谷歌有點“java equals方法最佳實踐” - 你會發現這樣的東西: http : //javarevisited.blogspot.sk/2011/02/how-to-write-equals-method-in-java.html
如果你懶得編寫自己的equals或hashcode方法(或者你有其他原因),你可以使用:
要么
你說你重寫equals()
所以我可以使用包含List接口的方法
但是,你沒有覆蓋該方法使用contains()
有一個適合大多數用途的默認實現; 歸結為“這些對象是同一個實例嗎?”。 正如之前的響應者指出的那樣,你的實現正在打破這種邏輯; 所有具有相同標題的考試都將被視為同一個對象,因此只要您的列表中有一個與您要添加的考試具有相同標題的考試,則contains()
檢查將始終返回true
,您將永遠不能再添加另一個。
如果你想平等的基礎上討論的題目和學生,那么以前的答案是正確的-你要同時重寫hashCode()
和equals()
,確保您認為重要的是要檢查的身份在各個領域兩種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.