這是我的問題: 當我嘗試重寫「我的類」的equals方法時,它根本不起作用,調用的函數是最抽象的一個,而不是「我的類」等於方法!下面是我的程序的一些代碼: 這是「我的課」等於代碼:覆蓋等於不工作
@Override
public boolean equals(Object o){
StudentProxy s = (StudentProxy)o;
return Matricola == s.Matricola && Name == s.Name && Surname == s.Surname;
}
這裏是我的斷言失敗:
@Test
public void storeStudentTest() throws Exception{
StudenteProxy s = new StudenteProxy(100, "Gianni", "Rosso", 27.2, 132);
DB.storeStudent(s);
StudentProxy ret = (StudentProxy)DB.retrieveStudentData(s.getMatricola());
DB.deleteStudent(s);
assertEquals(ret, s); // HERE ! ! !
}
我也試過用assertTrue:
assertTrue(ret.equals(s));
但我得到AssertionError;我認爲這是由於最抽象的equals被調用所導致的,並且由於兩個對象不是同一個對象,所以它給了我AssertionError消息。
任何想法? :(
PS:他們應該是平等的,我用不同的方式檢查了很多次所以這不是問題,我已經測試此代碼很多次,發現問題是等於不覆蓋;)
你看過正在返回的對象的內容嗎?此外,這些字段似乎是對象,您應該將它們與'equals()'而不是'=='進行比較。 – 2013-04-11 19:09:26
你確定你的代碼是在等於加法後重新編譯的嗎? – danieln 2013-04-11 19:10:30
我假設名稱和姓氏是字符串,所以你需要使用.equals而不是==作爲@AndrewLogvinov的建議。除此之外,你是否在Matricola上實現了平等? – 2013-04-11 19:10:45