groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "paolo di tommaso (JIRA)" <j...@apache.org>
Subject [jira] [Created] (GROOVY-9003) Allow the override of `toString` and `equals` methods for collection objects
Date Wed, 20 Feb 2019 07:57:00 GMT
paolo di tommaso created GROOVY-9003:
----------------------------------------

             Summary: Allow the override of `toString` and `equals` methods for collection
objects 
                 Key: GROOVY-9003
                 URL: https://issues.apache.org/jira/browse/GROOVY-9003
             Project: Groovy
          Issue Type: Improvement
            Reporter: paolo di tommaso
             Fix For: 3.x


Groovy provides a nice string representation for collection objects, however this implementation
do not allow to custom collection class to override their own string representation.

For example:
{code:java}

class Mylist extends ArrayList {
  Mylist(Collection c) { super(c) } 
  @Override boolean equals(Object o) { throw new UnsupportedOperationException () }
  @Override int hashCode() { throw new UnsupportedOperationException () }
  @Override String toString() { return 'CUSTOM STRING' }
}


def l = new Mylist([1,2,3]) 
assert l.toString() == 'CUSTOM STRING'
assert "$l" == '[1, 2, 3]'


def q = new Mylist([1,2,3])
assert l.equals(q)
assert l == q 

{code}

In the {{Mylist}} class the {{toString}} method is not invoked in the string interpolation
and {{equals}} is not invoked by the {{==}} operator. This breaks the java polymorphism contract
and create several hassles when implementing custom collection classes.

 I would propose to fix this behaviour in Groovy 3.0. It would be enough to check in the
target class implements the {{toString}} and {{equals}} methods otherwise fallback on the
current Groovy behaviour.

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message