Wie setze ich Gleichheit für zwei Klassen ohne eine Gleichheitsmethode durch?

Angenommen, ich habe eine Klasse ohne equals () -Methode, für die die Quelle nicht vorhanden ist. Ich möchte Gleichheit in zwei Fällen dieser Klasse behaupten.

Ich kann mehrere Behauptungen aufstellen:

assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...

Diese Lösung gefällt mir nicht, weil ich kein vollständiges Bild der Gleichstellung bekomme, wenn eine frühzeitige Behauptung fehlschlägt.

Ich kann manuell selbst vergleichen und das Ergebnis verfolgen:

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);

Dies gibt mir das volle Gleichheitsbild, ist aber klobig (und ich habe nicht einmal mögliche Nullprobleme berücksichtigt). Eine dritte Option ist die Verwendung von Comparator, wobei compareTo () nicht angibt, bei welchen Feldern die Gleichheit fehlgeschlagen ist.

Gibt es eine bessere Methode, um vom Objekt das zu bekommen, was ich will, ohne Gleiche zu unterordnen und zu überschreiben (ugh)?

Antworten auf die Frage(20)

Ihre Antwort auf die Frage