Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Groovy: Use @Canonical to Get Compiler-generated Equals, HashCode and ToString

DZone's Guide to

Groovy: Use @Canonical to Get Compiler-generated Equals, HashCode and ToString

· Java Zone
Free Resource

Build vs Buy a Data Quality Solution: Which is Best for You? Gain insights on a hybrid approach. Download white paper now!

Groovy makes it extremely easy to create Java beans with getters, setters, equals, hashCode, and toString:

@groovy.transform.Canonical
class Call {
   def method
   def args

   /* // custom impl. reusing the auto-generated one:
   String toString() {
      _toString().replaceFirst("^.*?Call", "")
   }*/
}

You can then do:

// Auto-gen. constr. with positional arguments:
def call1 = new Call("someMethod", "someArgs")
def call2 = new Call(method: "someMethod", args: "someArgs")
assert call1.getMethod() == call1.method
assert call2.equals(call1)
assert ([call1, call2] as Set).size() == 1 // hashCode

As you might have noticed, you may provide your own implementation of toString and reuse the auto-generated toString by calling _toString().

References

JavaDoc for @Canonical. You can also use separately any of: @ToString. @EqualsAndHashCode, @TupleConstructor. And may be check also the other available AST annotations such as Immutable and Synchronized and perhaps also groovy.beans‘s Bindable and Vetoable annotations, if you need true Java Beans.

 

From http://theholyjava.wordpress.com/2011/11/02/groovy-use-canonical-to-get-compiler-generated-equals-hashcode-and-tostring/

Build vs Buy a Data Quality Solution: Which is Best for You? Maintaining high quality data is essential for operational efficiency, meaningful analytics and good long-term customer relationships. But, when dealing with multiple sources of data, data quality becomes complex, so you need to know when you should build a custom data quality tools effort over canned solutions. Download our whitepaper for more insights into a hybrid approach.

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}