lombok的@EqualsAndHashcode注解

有时候我们在实体类上面会使用@Data注解,这个注解带了@EqualsAndHashcode注解。

一、用法

lombok的@EqualsAndHashcode注解_第1张图片

①of 用来指明你要用什么字段来重写equals和hashcode(具体怎么重写看下文)

②callSuper 这个选项只能用在有父类情况下,如上图如果没有Father那么会报错。默认是false,当改成true后,会调用父类的equals方法(具体看下文例子)

那么上文中这样设置,new了2个child,不管是equals还是hashcode那么他们都是一样的

二、lombok是怎么重写equals和hashcode方法

equals:

父类:

lombok的@EqualsAndHashcode注解_第2张图片

子类:

lombok的@EqualsAndHashcode注解_第3张图片

 

hashcode:

父类:

lombok的@EqualsAndHashcode注解_第4张图片

子类:

lombok的@EqualsAndHashcode注解_第5张图片

 

总结:

1、使用了@EqualsAndHashcode注解,那么他们都将重写equals和hashcode方法,而这两个方法都是根据你of指定的属性(默认全部)而生成的。

2、继承时候父类通常也要加上该属性,否则equals为false,hashcode会不一样

3、使用集合类时候也要小心一点,例如hashmap,会造成2个对象但是会覆盖(虽然我们业务逻辑上认为他们相等)。

你可能感兴趣的:(java)