Further reducing equals/hashcode boilerplate