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

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

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().


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.

Tags: java groovy

Copyright © 2024 Jakub Holý
Powered by Cryogen
Theme by KingMob