2

ここに私の問題があります:「私のクラス」の equals メソッドをオーバーライドしようとすると、単に機能しません。呼び出された関数は最も抽象的な関数であり、「私のクラス」の equals メソッドではありません! これが私のプログラムのコードです。これは「私のクラス」の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 が呼び出されていることが原因だと思います。2 つのオブジェクトが同じオブジェクトではないため、AssertionError というメッセージが表示されます。

何か案は???:(

PS: それらは equals である必要があります。さまざまな方法でこれを何度もチェックしたので、それは問題ではありません。このコードを何度もテストしたところ、equals がオーバーライドされないことが問題であることがわかりました ;)

4

2 に答える 2

8

これ以上の情報がないと判断するのは難しいですが、MatricolaNameおよびSurnameフィールドはObjects、おそらくStrings のようです。その場合、次のように比較する必要があります。

return Matricola.equals(s.Matricola) && Name.equals(s.Name) && Surname.equals(s.Surname);

それ以外の場合は、参照を比較しています。

于 2013-04-11T19:12:06.507 に答える
0

文字列を比較するには、equals を使用する必要があります

于 2013-04-11T19:09:47.893 に答える