Katakanlah saya memiliki kelas tanpa metode sama dengan (), yang tidak memiliki sumber. Saya ingin menegaskan kesetaraan pada dua contoh kelas itu.
Saya bisa melakukan banyak pernyataan:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Saya tidak suka solusi ini karena saya tidak mendapatkan gambaran kesetaraan penuh jika pernyataan awal gagal.
Saya dapat membandingkan sendiri secara manual dan melacak hasilnya:
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
Ini memberi saya gambaran kesetaraan penuh, tetapi kikuk (dan saya bahkan belum memperhitungkan kemungkinan masalah nol). Opsi ketiga adalah menggunakan Comparator, tetapi bandingkanTo () tidak akan memberi tahu saya bidang mana yang gagal persamaan.
Apakah ada praktik yang lebih baik untuk mendapatkan apa yang saya inginkan dari objek, tanpa subclassing dan overridding sama (ugh)?
equal
metode hanya memberi tahu apakah dua contoh sama, dan kami tidak peduli mengapa intes tidak sama.
Object
memiliki equals
metode, yang mungkin Anda maksud tidak ada metode sama yang diganti.