1、@EqualsAndHashCode(callSuper=false)
- 如果没有继承,仅对一个类加上@Data,不会有告警提示设置@EqualsAndHashCode(callSuper=false);
- 但存在继承,会有告警
@Data public class User extends Base{ private String userName; private String pwd; }
@Data public class Base { private Integer id; private String partment; }
上述会出现告警;
如果在User类上加上注解@EqualsAndHashCode(callSuper = true)
查看编译后的class,多一个if (!super.equals(o)) 判断
比较:
User user1 = new User("lee","123",1,"maths"); User user2 = new User("zhang","456",1,"maths"); sysytem.out.println(user1.equals(user2)); //true
不调用父类的属性,那么子类属性里面的相同的话,那hashcode的值就相同啦
如果@EqualsAndHashCode(callSuper=true),结果为fasle,因为此时,是用自己的属性和从父类继承的属性来生成hashcode
总结:
1.如果比较两个对象时应考虑超类中的成员,请使用@EqualsAndHashCode(callSuper=true),才能正确比较
2.如果只是想在当前类比较字段,可以使用@EqualsAndHashCode(callSuper=false),或者不适用此注解,它是默认选项
3.设置 lombok 全局属性,在src/main/java 目录下创建 lombok.config 文件。【注:一定要在src/main/java 目录下创建才有效】
# 声明该配置文件是一个根配置文件,从该配置文件所在的目录开始扫描 config.stopBubbling=true # 全局配置 equalsAndHashCode 的 callSuper 属性为true lombok.equalsAndHashCode.callSuper=call
标签:callSuper,EqualsAndHashCode,系列,持续,private,User,注解,true,属性 From: https://www.cnblogs.com/shirleyxueli/p/16805507.html