[
https://issues.apache.org/jira/browse/LANG-1499?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17132811#comment-17132811
]
Miguel Munoz commented on LANG-1499:
------------------------------------
On 26-Jan-20, Zhiqiang Zang had this idea:
_One potential fix could be to have another else if branch to check if two
classes share a common superclass._
Here's a problem with this idea. On a past project, we had a base class that
implemented equals() using reflectionEquals(), and all our entity classes
extended it. If we adopt Zhiqiang Zang's suggestion, all entity classes of
different types would test equal to each other.
> Equals transitivity is violated in EqualsBuilder
> ------------------------------------------------
>
> Key: LANG-1499
> URL: https://issues.apache.org/jira/browse/LANG-1499
> Project: Commons Lang
> Issue Type: Bug
> Components: lang.builder.*
> Affects Versions: 3.9
> Environment: Ubuntu 18.04
> JDK 1.8.0_221
> Commons Lang 3.9-RC2
> JUnit 5.4
> Reporter: Zhiqiang Zang
> Priority: Major
> Labels: Equals(), EqualsBuilder, transitivity
> Attachments: EqualTransitivityTest2.java, EqualsTransitivityTest.java
>
>
> EqualsBuilder.reflectionEquals() does not hold transitivity when comparing
> two subclasses extending a common superclass. For example:
> Given that both class D and E are subclasses of class C, C == D and C == E
> should imply D == E. However EqualsBuilder.reflectionEquals(D, E) returns
> *false* when both EqualsBuilder.reflectionEquals(C, D) and
> EqualsBuilder.reflectionEquals(C, E) return true.
> A junit test is provided as attachment.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)