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

Reply via email to