说我有一个没有equals()方法的类,该类没有源。我想在该类的两个实例上声明相等性。
我可以做多个断言:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
我不喜欢这种解决方案,因为如果早期断言失败,我将无法获得完整的平等情况。
我可以自己手动比较并跟踪结果:
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);
这给了我完全的平等印象,但是很笨拙(而且我什至都没有考虑可能的空问题)。第三种选择是使用Comparator,但是compareTo()不会告诉我哪些字段相等失败。
有没有更好的实践来从对象中获取我想要的东西,而又不继承和覆盖等于(ugh)?
equal
方法的实现仅告诉两个实例是否相等,我们不在乎为什么实例不相等。
Object
都有一个equals
方法,您可能意味着没有覆盖的equals方法。