@Equiv annotation is one of the features.
If you annotate fields by @Equiv annotations, you can dynamically generate
proper equals() and hashCode() using specified fields.
If you wrote the following groovy code:
class Sample {
@Equiv
String name
@Equiv
String value
String ignored
}
then you could use equals method and hashCode method:
def s1 = new Sample(name:'John', value:'Good', ignored:'Garbage')
def s2 = new Sample(name:'John', value:'Good', ignored:'Gold')
def s3 = new Sample(name:'John', value:'Bad', ignored:'Garbage')
def s4 = new Sample(name:'Mike', value:'Good', ignored:'Garbage')
assert s1 == s1
assert s1 == s2
assert s1 != s3
assert s1 != s4
assert s1.hashCode() == s1.hashCode()
assert s1.hashCode() == s2.hashCode()
assert s1.hashCode() != s3.hashCode()
assert s1.hashCode() != s4.hashCode()
I think it's useful for entities, etc. You can keep your classes very simple.

No comments:
Post a Comment