如果您知道EqualsBuilder from apache commons lang ,您知道可以使用它来实现带反射的equals方法。它似乎运作良好,但由于我使用第三方软件,我需要改变它的行为。我需要一个检查所有属性的通用比较器,并且不能假设attribut-objects有一个实现的equals方法,但EqualsBuilder假设它。
详细地说,我想更改public EqualsBuilder append(Object lhs, Object rhs)
,以便不要调用isEquals = lhs.equals(rhs)
EqualsBuilder也应该用于此对象。像isEquals = EqualsBuilder.reflectionEquals(lhs, rhs, false);
可以覆盖该方法,但不会调用它,因为EqualsBuilder会创建自己的对象。因此,我需要告诉EqualBuilder使用我的RecursiveEquilbuilder对象。
有什么想法吗?
答案 0 :(得分:0)
我知道它有点旧,但我希望它有所帮助。
我遇到了与您相同的问题,我发现the most voted answer similar question(不是作者选择的那个)是最合适的解决方案。
基本上,它包括使用名为Unitils的库。
这是用法:
User user1 = new User(1, "John", "Doe");
User user2 = new User(1, "John", "Doe");
assertReflectionEquals(user1, user2);
即使班级User
没有实施equals()
,也会通过。您可以在tutorial中看到更多示例和一个名为assertLenientEquals
的非常酷的断言。