有时候我们在实体类上面会使用@Data注解,这个注解带了@EqualsAndHashcode注解。
一、用法
①of 用来指明你要用什么字段来重写equals和hashcode(具体怎么重写看下文)
②callSuper 这个选项只能用在有父类情况下,如上图如果没有Father那么会报错。默认是false,当改成true后,会调用父类的equals方法(具体看下文例子)
那么上文中这样设置,new了2个child,不管是equals还是hashcode那么他们都是一样的
二、lombok是怎么重写equals和hashcode方法
equals:
父类:
子类:
hashcode:
父类:
子类:
总结:
1、使用了@EqualsAndHashcode注解,那么他们都将重写equals和hashcode方法,而这两个方法都是根据你of指定的属性(默认全部)而生成的。
2、继承时候父类通常也要加上该属性,否则equals为false,hashcode会不一样
3、使用集合类时候也要小心一点,例如hashmap,会造成2个对象但是会覆盖(虽然我们业务逻辑上认为他们相等)。