EqualsBuilder用作属性的比较器

时间:2013-06-05 14:51:40

标签: java apache-commons apache-commons-lang

如果您知道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对象。

有什么想法吗?

1 个答案:

答案 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的非常酷的断言。