[ https://issues.apache.org/jira/browse/GROOVY-7954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-7954. ----------------------------- > 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 10m > 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)