[
https://issues.apache.org/jira/browse/GROOVY-7954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King resolved GROOVY-7954.
-------------------------------
Resolution: Fixed
Assignee: Paul King
Fix Version/s: 2.5.7
3.0.0-beta-1
If the class on right is also Comparable, compareTo is now used in that
additional case. We may want to use logic such as left.equals(right) in some
scenarios but we are planning to revamp that in Groovy 4, so I refrained from
making that change here for just some of the cases where we'd like it to apply.
> Equal Operator for Classes implementing Comparable not Working on Interfaces
> ----------------------------------------------------------------------------
>
> Key: GROOVY-7954
> URL: https://issues.apache.org/jira/browse/GROOVY-7954
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Affects Versions: 2.4.7
> Environment: Windows 10, Java 7
> Reporter: Josef
> Assignee: Paul King
> Priority: Major
> Fix For: 3.0.0-beta-1, 2.5.7
>
> Attachments: Example.zip
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> Using the equal operator "==" on two instances A and B does not work
> correctly, when
> 1) A and B implement the same interface I1 but are not the same class and
> 2) interface I1 extends the "Comparable" interface.
> The checking in DefaultTypeTransformation.compareToWithEqualityCheck(...)
> checks for assignable classes, and uses compareTo when assignable on class
> level (which is not the case for instance A and B). But it does not check on
> interface level.
> That way, calling the compareTo(..) method is not performed.
> In my use case, class A and B are actually considered equal, even so their
> concrete implementation is different. And the compareTo(...) method would
> actually return 0.
> How about doing real equality checking instead of returning -1 close to the
> end of method DefaultTypeTransformation.compareToWithEqualityCheck(...):
> ...
> if (equalityCheckOnly) {
> return left.equals(right) ? 0 : -1;
> }
> throw new GroovyRuntimeException("Cannot compare " +
> left.getClass().getName() + " with value '" +
> left + "' and " + right.getClass().getName() + " with value
> '" + right + "'");
> Thanks for your effort.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)