[ 
https://issues.apache.org/jira/browse/LANG-1499?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17130650#comment-17130650
 ] 

Miguel Munoz commented on LANG-1499:
------------------------------------

I should add that any subclass that overrides the equals() method of its base 
class will fail the transitivity and symmetry tests, unless the overridden 
method does exactly the same thing as its super method. And the 
EqualsBuilder.reflectionEquals class effectively overrides the base class 
equals method. It may be possible to fix this by looking for a common base 
class that's not Object.class, but it's also not clear if that's what the end 
user would want.

> 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